using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Configuration;
using Newtonsoft.Json;
using backstage.Helpers;
using backstage.Models.Users;

using System.Net.Http;
using System.Security.Claims;
using Microsoft.AspNetCore.Localization;
using Microsoft.AspNetCore.Http;
using TokenVault_management.Models;
using backstage.Models.TokenVault;

namespace backstage.Controllers
{


    [Authorize]
    public class HomeController : Controller
    {

        private readonly IConfiguration _config;
        private readonly ICallApi _callApi;
        /// <summary>
        /// 讀取組態用
        /// </summary>

        public HomeController(IConfiguration config, ICallApi callApi)
        {
            _config = config;
            _callApi = callApi;
        }

        public async Task<IActionResult> token()
        {
            // 確認使用者是否已經登入
            if (User.Identity.IsAuthenticated)
            {
                return Ok( User.FindFirstValue("token"));
            }
            return Ok();
        }




        public async Task<IActionResult> Index()
        {
            #region department數量
            var DepartmentsResponse = new DepartmentsResponse();
            var url = _config["IP"] + "/merchant/list";

            var httpMethod = HttpMethod.Post;
            // 取得使用者的 "token" Claim 值
            string token = User.FindFirstValue("token");

            var parameters = new Dictionary<string, string>
            {
                { "token", token }
            };

            var departmentCount = 0;
            var apiResult = await _callApi.CallAPI(url, parameters, httpMethod);
            if (apiResult.IsSuccess)
            {
                DepartmentsResponse = JsonConvert.DeserializeObject<DepartmentsResponse>(apiResult.Data.ToString());
                if (DepartmentsResponse.r == 0)
                {
					departmentCount = DepartmentsResponse.count;
                }

            }
            ViewBag.departmentCount = departmentCount;

			#endregion

			#region Token Vault 數量
		    url = _config["IP"] + "/tsp/merchant/vault/list";

            parameters = new Dictionary<string, string>
            {
                  

            };

            var vaultCount = 0;
			apiResult = await _callApi.CallAPI(url, parameters, httpMethod);
            if (apiResult.IsSuccess)
            {
                var response = JsonConvert.DeserializeObject<Response>(apiResult.Data.ToString());
                if (response.r == 0)
                {
					vaultCount = response.count;
                }

            }
            ViewBag.vaultCount = vaultCount;

			#endregion

			#region Token Vault Entry  資料數量
			var departmentList = DepartmentsResponse.merchants;
            int totalEntry = 0;
            url = _config["IP"] + "/v2/vault/get";
            if (departmentList != null)
            {
                foreach (var d in departmentList)
                {
                        parameters = new Dictionary<string, string>
                        {
                            { "Merchant_id", d.merchant_id.ToString() }

                        };

                        apiResult = await _callApi.CallAPI(url, parameters, httpMethod);
                    if (apiResult.IsSuccess)
                    {
                        var TokenVaultResponse = JsonConvert.DeserializeObject<TokenVaultResponse>(apiResult.Data.ToString());
                        if (TokenVaultResponse.r == 0)
                        {
                            if (TokenVaultResponse.info!=null)
                            {
                                foreach (var v in TokenVaultResponse.info)
                                {
                                    totalEntry += v.tokenCount;
                                }
                            }
                        }

                    }
                }
            }
            
            ViewBag.totalEntry = totalEntry;


            #endregion

            #region Token Vualt Entry 本月新增資料數量

            #endregion

            #region Token Vualt Entry 本月修改資料數量

            #endregion





            return View();
        }


        public IActionResult ChangeLanguage(string lang, string returnUrl)
        {
            // 設置所選語言
            Response.Cookies.Append(
                CookieRequestCultureProvider.DefaultCookieName,
                CookieRequestCultureProvider.MakeCookieValue(new RequestCulture(lang)),
                new CookieOptions { Expires = DateTimeOffset.UtcNow.AddYears(1) }
            );

            // 重新導向到先前的頁面或首頁
            return Redirect("~" + returnUrl);
        }



        public IActionResult Error()
        {
            return View();
        }

        public IActionResult AccessDenied()
        {
            TempData["IsSuccess"] = false;
            TempData["msg"] = "您沒有訪問此頁面的權限。";


            return RedirectToAction("Index");
        }






    }
}