@page "/settings"
@attribute [Authorize]

@using MudBlazor
@using Microsoft.JSInterop
@inject IJSRuntime JSRuntime
@inject ISnackbar Snackbar

<div>
    <MudText Typo="Typo.h4" GutterBottom="true">تنظیمات</MudText>
    <MudText Typo="Typo.body1" Color="Color.Secondary" Class="mb-4">
        مدیریت تنظیمات کاربری و سیستم
    </MudText>

    <MudTabs Elevation="2" Rounded="true" ApplyEffectsToContainer="true" PanelClass="pa-6">
        <!-- General Settings -->
        <MudTabPanel Text="عمومی" Icon="@Icons.Material.Filled.Settings">
            <MudCard Class="mb-4">
                <MudCardHeader>
                    <CardHeaderContent>
                        <MudText Typo="Typo.h6">تنظیمات نمایش</MudText>
                    </CardHeaderContent>
                </MudCardHeader>
                <MudCardContent>
                    <MudStack Spacing="3">
                        <MudSelect @bind-Value="_selectedLanguage" 
                                   Label="زبان" 
                                   Variant="Variant.Outlined">
                            <MudSelectItem T="string" Value="@("fa")">فارسی</MudSelectItem>
                            <MudSelectItem T="string" Value="@("en")">English</MudSelectItem>
                        </MudSelect>

                        <MudSwitch T="bool" @bind-Value="_darkMode" 
                                   Color="Color.Primary" 
                                   Label="حالت تاریک" />

                        <MudSwitch T="bool" @bind-Value="_compactMode" 
                                   Color="Color.Secondary" 
                                   Label="حالت فشرده" />

                        <MudSlider @bind-Value="_pageSize" 
                                   Min="10" 
                                   Max="100" 
                                   Step="10"
                                   Color="Color.Info">
                            تعداد ردیف در هر صفحه: @_pageSize
                        </MudSlider>
                    </MudStack>
                </MudCardContent>
                <MudCardActions>
                    <MudButton Variant="Variant.Filled" 
                               Color="Color.Primary" 
                               OnClick="SaveGeneralSettings">
                        ذخیره تغییرات
                    </MudButton>
                </MudCardActions>
            </MudCard>
        </MudTabPanel>

        <!-- Notifications -->
        <MudTabPanel Text="اعلان‌ها" Icon="@Icons.Material.Filled.Notifications">
            <MudCard>
                <MudCardContent Class="d-flex flex-column align-center justify-center" Style="min-height: 200px;">
                    <MudIcon Icon="@Icons.Material.Filled.NotificationsActive" Size="Size.Large" Color="Color.Secondary" Class="mb-3" />
                    <MudText Typo="Typo.h6" Color="Color.Secondary">سیستم اعلان‌ها به‌زودی فعال می‌شود</MudText>
                    <MudText Typo="Typo.body2" Color="Color.Secondary" Class="mt-2">
                        امکان تنظیم اعلان‌های ایمیل، پیامک و سیستمی در نسخه‌های آینده اضافه خواهد شد.
                    </MudText>
                </MudCardContent>
            </MudCard>
        </MudTabPanel>

        <!-- Security -->
        <MudTabPanel Text="امنیت" Icon="@Icons.Material.Filled.Security">
            <MudCard>
                <MudCardContent Class="d-flex flex-column align-center justify-center" Style="min-height: 200px;">
                    <MudIcon Icon="@Icons.Material.Filled.Lock" Size="Size.Large" Color="Color.Secondary" Class="mb-3" />
                    <MudText Typo="Typo.h6" Color="Color.Secondary">تنظیمات امنیتی به‌زودی فعال می‌شود</MudText>
                    <MudText Typo="Typo.body2" Color="Color.Secondary" Class="mt-2">
                        امکان تغییر رمز عبور و احراز هویت دو مرحله‌ای در نسخه‌های آینده اضافه خواهد شد.
                    </MudText>
                </MudCardContent>
            </MudCard>
        </MudTabPanel>

        <!-- About -->
        <MudTabPanel Text="درباره" Icon="@Icons.Material.Filled.Info">
            <MudCard>
                <MudCardContent>
                    <MudStack Spacing="3">
                        <MudText Typo="Typo.h5">سیستم مدیریت شبکه فروش</MudText>
                        <MudDivider />
                        
                        <MudStack Row="true" Spacing="2">
                            <MudText Typo="Typo.subtitle2" Style="min-width: 150px;">نسخه:</MudText>
                            <MudText Typo="Typo.body1">1.0.0</MudText>
                        </MudStack>

                        <MudStack Row="true" Spacing="2">
                            <MudText Typo="Typo.subtitle2" Style="min-width: 150px;">سازنده:</MudText>
                            <MudText Typo="Typo.body1">FourSat Team</MudText>
                        </MudStack>

                        <MudStack Row="true" Spacing="2">
                            <MudText Typo="Typo.subtitle2" Style="min-width: 150px;">تاریخ انتشار:</MudText>
                            <MudText Typo="Typo.body1">2025-11-30</MudText>
                        </MudStack>

                        <MudDivider />

                        <MudText Typo="Typo.subtitle2">ماژول‌های فعال:</MudText>
                        <MudList T="string">
                            <MudListItem T="string" Icon="@Icons.Material.Filled.Check" IconColor="Color.Success">
                                مدیریت کمیسیون
                            </MudListItem>
                            <MudListItem T="string" Icon="@Icons.Material.Filled.Check" IconColor="Color.Success">
                                مدیریت شبکه
                            </MudListItem>
                            <MudListItem T="string" Icon="@Icons.Material.Filled.Check" IconColor="Color.Success">
                                مدیریت باشگاه مشتریان
                            </MudListItem>
                            <MudListItem T="string" Icon="@Icons.Material.Filled.Check" IconColor="Color.Success">
                                گزارش‌گیری پیشرفته
                            </MudListItem>
                        </MudList>
                    </MudStack>
                </MudCardContent>
            </MudCard>
        </MudTabPanel>
    </MudTabs>
</div>

@code {
    // General Settings
    private string _selectedLanguage = "fa";
    private bool _darkMode = false;
    private bool _compactMode = false;
    private int _pageSize = 20;

    protected override async Task OnInitializedAsync()
    {
        await LoadSettings();
    }

    private async Task LoadSettings()
    {
        try
        {
            _selectedLanguage = await GetLocalStorage<string>("user_language", "fa");
            _darkMode = await GetLocalStorage<bool>("user_darkMode", false);
            _compactMode = await GetLocalStorage<bool>("user_compactMode", false);
            _pageSize = await GetLocalStorage<int>("user_pageSize", 20);
        }
        catch (Exception ex)
        {
        }
    }

    private async Task SaveGeneralSettings()
    {
        try
        {
            await SetLocalStorage("user_language", _selectedLanguage);
            await SetLocalStorage("user_darkMode", _darkMode);
            await SetLocalStorage("user_compactMode", _compactMode);
            await SetLocalStorage("user_pageSize", _pageSize);
            
            Snackbar.Add("تنظیمات عمومی با موفقیت ذخیره شد", Severity.Success);
        }
        catch (Exception ex)
        {
            Snackbar.Add($"خطا در ذخیره تنظیمات: {ex.Message}", Severity.Error);
        }
    }

    // LocalStorage Helper Methods
    private async Task<T> GetLocalStorage<T>(string key, T defaultValue)
    {
        try
        {
            var json = await JSRuntime.InvokeAsync<string>("localStorage.getItem", key);
            if (string.IsNullOrEmpty(json))
                return defaultValue;
            
            if (typeof(T) == typeof(string))
                return (T)(object)json;
            if (typeof(T) == typeof(bool))
                return (T)(object)bool.Parse(json);
            if (typeof(T) == typeof(int))
                return (T)(object)int.Parse(json);
            
            return System.Text.Json.JsonSerializer.Deserialize<T>(json) ?? defaultValue;
        }
        catch
        {
            return defaultValue;
        }
    }

    private async Task SetLocalStorage<T>(string key, T value)
    {
        var json = typeof(T) == typeof(string) || typeof(T) == typeof(bool) || typeof(T) == typeof(int) 
            ? value?.ToString() ?? ""
            : System.Text.Json.JsonSerializer.Serialize(value);
        
        await JSRuntime.InvokeVoidAsync("localStorage.setItem", key, json);
    }
}
