using System.Text;
using DateTimeConverterCL;
using Microsoft.JSInterop;
using MudBlazor;

namespace BackOffice.Pages.Commission;

public partial class WeeklyReports
{
    private async Task ExportToExcel()
    {
        if (_reports == null || !_reports.Any())
        {
            Snackbar.Add("داده‌ای برای خروجی وجود ندارد.", Severity.Info);
            return;
        }

        try
        {
            var sb = new StringBuilder();
            sb.AppendLine("هفته,مبلغ کل استخر,مجموع موجودی‌ها,ارزش هر موجودی,وضعیت,تاریخ محاسبه");

            foreach (var r in _reports)
            {
                sb.AppendLine(string.Join(",",
                    EscapeCsv(r.WeekDisplayName),
                    r.TotalPoolAmount,
                    r.TotalBalances,
                    r.ValuePerBalance,
                    r.IsCalculated ? "محاسبه شده" : "در انتظار",
                    r.CalculatedAt != null ? r.CalculatedAt.ToDateTime().MiladiToJalaliWithTime() : "-"));
            }

            var bytes = Encoding.UTF8.GetPreamble()
                .Concat(Encoding.UTF8.GetBytes(sb.ToString()))
                .ToArray();
            var base64 = Convert.ToBase64String(bytes);
            var filename = $"weekly-reports-{DateTime.Now:yyyyMMddHHmmss}.csv";

            await jsRuntime.InvokeVoidAsync("jsSaveAsFile", filename, base64);
            Snackbar.Add("خروجی Excel (CSV) آماده شد.", Severity.Success);
        }
        catch (Exception ex)
        {
            Snackbar.Add($"خطا در خروجی Excel: {ex.Message}", Severity.Error);
        }
    }

    private static string EscapeCsv(string value)
    {
        if (string.IsNullOrEmpty(value)) return "";
        if (value.Contains(',') || value.Contains('"') || value.Contains('\n'))
            return $"\"{value.Replace("\"", "\"\"")}\"";
        return value;
    }
}
