using Microsoft.AspNetCore.Components;
using Microsoft.JSInterop;
using System;
using System.Net.Http.Json;
using System.Text.Json;
using Front.Program.Services;

namespace Front.Program.Views.Project;

public partial class TopProjectNav : ComponentBase
{
    [Inject] NavigationManager NavigationManager { get; set; } = default!;
    [Inject] UserService UserService { get; set; } = default!;
    
    [Inject] IJSRuntime JS { get; set; } = default!;

    [Inject] HttpClient Http { get; set; } = default!;
    string UserName { get; set; } = default!;

    protected bool isOpen = false;
    bool isLogin = false;

    protected override async Task OnInitializedAsync()
    {
        var (success, userData) = await UserService.GetUserData();
        if (success && userData != null)
        {
            Console.WriteLine(userData.Name);
            UserName = userData.Name;
            isLogin = true;
        }
        // isLogin = bool.TryParse(await StorageService.GetItemAsync("IsLogin"), out var result) && result;
        // // if (!isLogin && !string.IsNullOrEmpty(UserName)) return;
        // if (!isLogin) return; // && !string.IsNullOrEmpty(UserName)) return;
        
        // try
        // {
        //     var encryptedName = await StorageService.GetItemAsync("USER");
        //     Console.WriteLine($"{encryptedName}");
        //     if (!string.IsNullOrEmpty(encryptedName))
        //     {
        //         try 
        //         {
        //             UserName = await SecureService.DecryptAsync(encryptedName);
        //             Console.WriteLine($"세션 스토리지에서 가져온 사용자 이름: '{UserName}'");
                    
        //             return;
        //         }
        //         catch (Exception ex)
        //         {
        //             Console.WriteLine($"이름 복호화 중 오류 발생: {ex.Message}");
        //             await StorageService.RemoveItemAsync("USER");
        //         }
        //     }
            
        //     // apiSender.js의 함수를 사용하여 연결 키 가져오기
        //     var headerValue = await StorageService.GetItemAsync("Web_AM_Connect_Key");
        //     Console.WriteLine($"세션 스토리지에서 가져온 헤더 값: '{headerValue}'");
            
        //     if (string.IsNullOrEmpty(headerValue))
        //     {
        //         Console.WriteLine("연결 키가 없습니다");
        //         return;
        //     }

        //     // apiSender.js의 함수를 사용하여 API 호출
        //     Console.WriteLine("세션 API 호출 시작");
        //     var response = await JS.InvokeAsync<JsonElement>("fetchWithHeaderAndReturnUrl", 
        //         "/api/v1/in/user/auth/session", 
        //         "GET", 
        //         "Web_AM_Connect_Key", 
        //         headerValue);
            
        //     Console.WriteLine($"세션 API 응답 타입: {response.ValueKind}");
        //     Console.WriteLine($"세션 API 응답 내용: {response}");

        //     if (response.ValueKind == JsonValueKind.Null || response.ValueKind == JsonValueKind.Undefined)
        //     {
        //         Console.WriteLine("응답이 null이거나 undefined입니다");
        //         return;
        //     }

        //     try 
        //     {
        //         if (response.TryGetProperty("status", out var statusElement))
        //         {
        //             Console.WriteLine($"status 요소 타입: {statusElement.ValueKind}");
        //             if (statusElement.TryGetProperty("code", out var codeElement))
        //             {
        //                 var code = codeElement.GetString();
        //                 Console.WriteLine($"응답 코드: {code}");
                        
        //                 if (code == "000")
        //                 {
        //                     if (response.TryGetProperty("data", out var dataElement))
        //                     {
        //                         Console.WriteLine($"data 요소 타입: {dataElement.ValueKind}");
                                
        //                         // 전체 data를 JSON 문자열로 변환
        //                         var userDataJson = dataElement.ToString();
                                
        //                         // 전체 데이터 암호화
        //                         var encryptedUserData = await SecureService.EncryptAsync(userDataJson);
        //                         await StorageService.SetItemAsync("USER_DATA", encryptedUserData);
                                
        //                         // 기존 name 처리 로직
        //                         if (dataElement.TryGetProperty("name", out var nameElement))
        //                         {
        //                             UserName = nameElement.GetString() ?? "이름 없음";
        //                             isLogin = true;
        //                             Console.WriteLine($"NM: {UserName}");
        //                             var encryptedUserName = await SecureService.EncryptAsync(UserName);
        //                             Console.WriteLine($"NM: {encryptedUserName}");
        //                             await StorageService.SetItemAsync("USER", encryptedUserName);
        //                             await StorageService.SetItemAsync("Web_AM_Connect_Key", headerValue);
        //                             Console.WriteLine($"로그인된 사용자: {UserName}");
        //                             return;
        //                         }
        //                     }
        //                 }
        //                 else {
        //                     if (isLogin) {
        //                         isLogin = false;
        //                         await StorageService.SetItemAsync("IsLogin","false");
        //                     }
        //                 }
        //             }
        //         }
        //         Console.WriteLine("로그인되지 않은 상태");
        //     }
        //     catch (Exception ex)
        //     {
        //         Console.WriteLine($"응답 처리 중 오류 발생: {ex.Message}");
        //         Console.WriteLine($"응답 처리 스택 트레이스: {ex.StackTrace}");
        //     }
        // }
        // catch (Exception ex)
        // {
        //     Console.WriteLine($"세션 확인 중 오류 발생: {ex.Message}");
        //     Console.WriteLine($"스택 트레이스: {ex.StackTrace}");
        // }
    }

    public void OnClickMenuDown()
    {
        isOpen = !isOpen;
    }

    public void OnClickRedirect()
    {
        if (isOpen) isOpen = !isOpen;
        NavigationManager.NavigateTo("/about");
    }
    
    public void OnClickLogin()
    {
        if (isOpen) isOpen = !isOpen;
        NavigationManager.NavigateTo("/auth");
    }

    public async Task OnClickLogout() 
    {
        if (await UserService.ClearUserData())
        {
            isLogin = false;
            UserName = null;
        }
    }
}