#region copyright
//------------------------------------------------------------------------------
//  此代码版权声明为全文件覆盖,如有原作者特别声明,会在下方手动补充
//  此代码版权(除特别声明外的代码)归作者本人Diego所有
//  源代码使用协议遵循本仓库的开源协议及附加协议
//  Gitee源代码仓库:https://gitee.com/diego2098/ThingsGateway
//  Github源代码仓库:https://github.com/kimdiego2098/ThingsGateway
//  使用文档:https://diego2098.gitee.io/thingsgateway-docs/
//  QQ群:605534569
//------------------------------------------------------------------------------
#endregion
using Furion.DataEncryption;
using Masa.Blazor.Presets;
using Microsoft.AspNetCore.Components.Web;
using Microsoft.Extensions.Hosting;
using ThingsGateway.Admin.Application;
using ThingsGateway.Admin.Blazor.Core;
using ThingsGateway.Admin.Core;
using ThingsGateway.Admin.Core.JsonExtensions;
namespace ThingsGateway.Admin.Blazor;
/// 
/// 登录页面
/// 
public partial class Login
{
    private string CaptchaValue;
    bool _showPassword;
    bool _showCaptcha;
    private readonly LoginInput loginModel = new();
    [Inject]
    AjaxService AjaxService { get; set; }
    string UserLogoUrl { get; set; } = BlazorResourceConst.ResourceUrl + "images/defaultUser.svg";
    string Welcome { get; set; }
    private ValidCodeOutput CaptchaInfo { get; set; }
    private string Password { get; set; }
    private string CONFIG_REMARK { get; set; }
    private string CONFIG_TITLE { get; set; }
    private async Task Enter(KeyboardEventArgs e)
    {
        if (e.Code == "Enter" || e.Code == "NumpadEnter")
        {
            await LoginAsync();
        }
    }
    private PImageCaptcha captcha;
    private async Task LoginAsync()
    {
        loginModel.ValidCodeReqNo = CaptchaInfo.ValidCodeReqNo;
        loginModel.ValidCode = CaptchaValue;
        loginModel.Password = DESCEncryption.Encrypt(Password, DESCKeyConst.DESCKey);
        if (IsMobile)
        {
            loginModel.Device = AuthDeviceTypeEnum.APP;
        }
        else
        {
            loginModel.Device = AuthDeviceTypeEnum.PC;
        }
        var ajaxOption = new AjaxOption { Url = "/auth/b/login", Data = loginModel, };
        var str = await AjaxService.GetMessageAsync(ajaxOption);
        if (str != null)
        {
            var ret = str.ToJsonWithT>();
            if (ret.Code != 200)
            {
                if (captcha != null)
                {
                    await captcha.RefreshCode();
                }
                await PopupService.EnqueueSnackbarAsync(new("登录错误" + ": " + ret.Msg.ToString(), AlertTypes.Error));
            }
            else
            {
                await PopupService.EnqueueSnackbarAsync(new("登录成功", AlertTypes.Success));
                await Task.Delay(500);
                var userId = await App.GetService().GetIdByAccountAsync(loginModel.Account);
                var data = await App.GetService().GetLoginDefaultRazorAsync(userId);
                var sameLevelMenus = await App.GetService().GetaMenuAndSpaListAsync();
                if (NavigationManager.ToAbsoluteUri(NavigationManager.Uri).AbsolutePath == "/Login" || NavigationManager.ToAbsoluteUri(NavigationManager.Uri).AbsolutePath == "/")
                    await AjaxService.GotoAsync(sameLevelMenus.FirstOrDefault(a => a.Id == data)?.Component ?? "index");
                else
                    await AjaxService.GotoAsync(NavigationManager.Uri);
            }
        }
        else
        {
            if (captcha != null)
            {
                await captcha.RefreshCode();
            }
            await PopupService.EnqueueSnackbarAsync(new("登录错误", AlertTypes.Error));
        }
    }
    [Inject]
    private NavigationManager NavigationManager { get; set; }
    /// 
    protected override async Task OnParametersSetAsync()
    {
        if (App.HostEnvironment.IsDevelopment())
        {
            loginModel.Account = "superAdmin";
            Password = "111111";
        }
        GetCaptchaInfo();
        CONFIG_TITLE = (await App.GetService().GetByConfigKeyAsync(ConfigConst.SYS_CONFIGBASEDEFAULT, ConfigConst.CONFIG_TITLE))?.ConfigValue;
        CONFIG_REMARK = (await App.GetService().GetByConfigKeyAsync(ConfigConst.SYS_CONFIGBASEDEFAULT, ConfigConst.CONFIG_REMARK))?.ConfigValue;
        _showCaptcha = (await App.GetService().GetByConfigKeyAsync(ConfigConst.SYS_CONFIGBASEDEFAULT, ConfigConst.CONFIG_CAPTCHA_OPEN))?.ConfigValue?.ToBoolean() == true;
        Welcome = "欢迎使用" + CONFIG_TITLE + "!";
        await base.OnParametersSetAsync();
    }
    private void GetCaptchaInfo()
    {
        CaptchaInfo = App.GetService().GetCaptchaInfo();
    }
    private Task RefreshCode()
    {
        CaptchaInfo = App.GetService().GetCaptchaInfo();
        return Task.FromResult(CaptchaInfo.CodeValue);
    }
}