using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Security.Claims;
using System.Text;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Authentication;
using Microsoft.AspNetCore.Authentication.Cookies;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Rendering;
using Microsoft.Extensions.Configuration;
using Newtonsoft.Json;
using NLog;
using backstage.Helpers;
using backstage.Models;
using backstage.Models.Users;
using Newtonsoft.Json.Linq;
using System.Linq;
using backstage.Models.TokenVault;
using Microsoft.AspNetCore.Routing;
using System.Text.Json;
using System.Dynamic;
using TokenVault_management.Models;
using Microsoft.Extensions.Localization;
using Microsoft.AspNetCore.Localization;

namespace backstage.Controllers
{
    public class TokenVaultController : Controller
    {
        private readonly IHttpContextAccessor _httpContextAccessor;
        private readonly IConfiguration _config;
        private readonly ICallApi _callApi;
        private readonly IStringLocalizer<UserController> _localizer;

        private static Logger logger = LogManager.GetCurrentClassLogger();
        private readonly string _currentLanguage;
        /// <summary>
        /// 讀取組態用
        /// </summary>

        public TokenVaultController(IConfiguration config, ICallApi callApi, IHttpContextAccessor httpContextAccessor, IStringLocalizer<UserController> localizer)
        {
            _config = config;
            _callApi = callApi;
            _httpContextAccessor = httpContextAccessor;
            _localizer = localizer;
            var requestCultureFeature = _httpContextAccessor.HttpContext.Features.Get<IRequestCultureFeature>();
            var currentCulture = requestCultureFeature.RequestCulture.Culture;
            _currentLanguage = currentCulture.TwoLetterISOLanguageName;
        }



        [HttpGet]
        public async Task<IActionResult> List(int merchantId)
        {
            var TokenVaultResponse = new TokenVaultResponse();
            string msg = string.Empty;
            ViewBag.Merchant_id = merchantId;

            #region 取得部門列表
            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 apiResult = await _callApi.CallAPI(url, parameters, httpMethod);
            if (apiResult.IsSuccess)
            {
                DepartmentsResponse = JsonConvert.DeserializeObject<DepartmentsResponse>(apiResult.Data.ToString());
                if (DepartmentsResponse.r == 0)
                {

                    ViewBag.DepartmentsList = (from o in DepartmentsResponse.merchants
                                               select new SelectListItem
                                               {
                                                   Value = o.merchant_id.ToString(),
                                                   Text = o.merchant_id + "_" + o.name
                                               }).ToList();
                }
            }

            #endregion
            return View();




        }


        [HttpGet]
        public async Task<IActionResult> ListFields([FromQuery] int Merchant_id, int vault_id)
        {
            string msg;
            var TokenVaultResponse = new TokenVaultResponse();
            // 確認使用者是否已經登入
            if (!User.Identity.IsAuthenticated)
            {
                return RedirectToAction("Login", "User");
            }
            ViewBag.Merchant_id = Merchant_id;
            ViewBag.vault_id = vault_id;

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

            var httpMethod = HttpMethod.Post;
            var url = _config["IP"] + "/v2/vault/get";
            var parameters = new Dictionary<string, string>
              {

                { "Merchant_id",Merchant_id.ToString()},
                { "id",vault_id.ToString()},
                { "info","INFO"}

            };
            var apiResult = await _callApi.CallAPI(url, parameters, httpMethod);
            if (apiResult.IsSuccess)
            {
                TokenVaultResponse = JsonConvert.DeserializeObject<TokenVaultResponse>(apiResult.Data.ToString());
                if (TokenVaultResponse.r == 0)
                {
                    if (TokenVaultResponse.info.Count > 0)
                    {
                        ViewBag.VaultInfo = TokenVaultResponse.info[0];
                    }
                    else
                    {
                        RedirectToAction("List");
                    }

                }
            }


            url = _config["IP"] + "/v2/vault/get";
            httpMethod = HttpMethod.Post;


            parameters = new Dictionary<string, string>
              {
                    { "Merchant_id", Merchant_id.ToString() },
                    { "id", vault_id.ToString() },
                    { "info", "FIELDS" }

                };

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

                    return View(FieldsResponse);
                }
            }
            return View();
        }

        [HttpGet]
        public async Task<IActionResult> ListUsers(int Merchant_id, int vault_id, int field_id)
        {
            var TokenVaultResponse = new TokenVaultResponse();


            ViewBag.Merchant_id = Merchant_id;
            ViewBag.vault_id = vault_id;
            ViewBag.field_id = field_id;

           
            var url = _config["IP"] + "/v2/vault/get";
            var httpMethod = HttpMethod.Post;
            // 取得使用者的 "token" Claim 值
            string token = User.FindFirstValue("token");

            var parameters = new Dictionary<string, string>
              {
                    { "Merchant_id", Merchant_id.ToString() },
                    { "id", vault_id.ToString() },
                    { "info", "USERS" }

                };

            var apiResult = await _callApi.CallAPI(url, parameters, httpMethod);
            if (apiResult.IsSuccess)
            {
                var FieldsResponse = JsonConvert.DeserializeObject<FieldsResponse>(apiResult.Data.ToString());
                if (FieldsResponse.r == 0)
                {
                    //處理遮罩
                    var field = FieldsResponse.fields.Where(f => f.id == field_id).FirstOrDefault();
                    foreach (var u in field.users)
                    {
                        u.masksText = "[" + string.Join(", ", u.masks) + "]";
                    }

                    #region 處理使用者選單
                    url = _config["IP"] + "/user/list";
                    httpMethod = HttpMethod.Post;
                    var types = new[] { "all" };
                    var types_data = new { inc = types };
                    parameters = new Dictionary<string, string>
                      {
                            { "token", token },
                            { "types", JsonConvert.SerializeObject(types_data)},
                        { "email","1"},
                        { "phone","1"}
                            //{ "types", "{\"inc\":[\"all\"]}"}

                        };

                    apiResult = await _callApi.CallAPI(url, parameters, httpMethod);
                    if (apiResult.IsSuccess)
                    {
                        var UserResponse = JsonConvert.DeserializeObject<UserResponse>(apiResult.Data.ToString());
                        var newUsers = new List<User>();
                        if (UserResponse.userCount > 0)
                        {
                            foreach (var u in UserResponse.Users)
                            {
                                var existUser = field.users.Where(uu => uu.id == u.uid).Any();
                                if (!existUser)
                                    newUsers.Add(u);

                            }
                        }

                        ViewBag.users = (from o in newUsers
                                         select new SelectListItem
                                         {
                                             Value = o.uid.ToString(),
                                             Text = o.uid + "_" + o.name + ", " + o.username
                                         }).ToList();

                    }
                    #endregion

                    #region 處理遮罩tooltip

                    url = _config["IP"] + "/v2/vault/get";
                    httpMethod = HttpMethod.Post;


                    parameters = new Dictionary<string, string>
                      {
                    { "Merchant_id", Merchant_id.ToString() },
                    { "id", vault_id.ToString() },
                    { "info", "MASKS" }

                     };

                    apiResult = await _callApi.CallAPI(url, parameters, httpMethod);
                    if (apiResult.IsSuccess)
                    {
                        FieldsResponse = JsonConvert.DeserializeObject<FieldsResponse>(apiResult.Data.ToString());
                        foreach (var u in field.users)
                        {
                            if (u.masks.Count > 0)
                            {
                                var maskTextList = new List<string>();
                                var existField = FieldsResponse.fields.FirstOrDefault(f => f.id == field_id);

                                foreach (var maskId in u.masks)
                                {
                                    var matchingMask = existField.masks.FirstOrDefault(m => m.id == maskId);
                                    if (matchingMask != null)
                                    {
                                        string maskText = $"[{matchingMask.id}] - {matchingMask.name} - {matchingMask.setting}";
                                        maskTextList.Add(maskText);
                                    }
                                }

                                u.masksSettingText = string.Join(", ", maskTextList);
                            }
                        }

                    }
                    #endregion




                    return View(field.users);
                }
            }
            return View();
        }

        /// <summary>
        /// 欄位添加使用者 ajax
        /// </summary>
        /// <param name="requestData"></param>
        /// <returns></returns>
        [Authorize(Policy = "AdminOnly")]
        [HttpPost]
        public async Task<ResultModel> AddUsers([FromBody] JsonElement requestData)
        {
            string msg;
            var result = new ResultModel();
            int Merchant_id = requestData.GetProperty("Merchant_id").GetInt32();
            int vault_id = requestData.GetProperty("vault_id").GetInt32();
            int field_id = requestData.GetProperty("field_id").GetInt32();
            int user_id = requestData.GetProperty("user_id").GetInt32();



            // 構建包含參數的查詢字串
            var queryString = new RouteValueDictionary {
                { "Merchant_id", Merchant_id },
                { "vault_id", vault_id },
                { "field_id", field_id },
            };


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

            //檢查user_id是否存在
            var url = _config["IP"] + "/user/list";
            var httpMethod = HttpMethod.Post;
            var types = new[] { "all" };
            var types_data = new { inc = types };
            var parameters = new Dictionary<string, string>
                      {
                            { "token", token },
                            { "types", JsonConvert.SerializeObject(types_data)},
                        { "email","1"},
                        { "phone","1"}

                        };

            var apiResult = await _callApi.CallAPI(url, parameters, httpMethod);
            if (apiResult.IsSuccess)
            {
                var UserResponse = JsonConvert.DeserializeObject<UserResponse>(apiResult.Data.ToString());
                if (UserResponse.userCount > 0)
                {
                    var existUser = UserResponse.Users.Where(u => u.uid == user_id).FirstOrDefault();
                    if (existUser == null)
                    {
                        switch (_currentLanguage)
                        {

                            case "en":
                                msg = "User is not exist.";
                                break;
                            case "zh":
                                msg = "使用者不存在";
                                break;
                            default:
                                msg = "使用者不存在";
                                break;

                        }
                        result.IsSuccess = false;
                        result.Message = msg;
                        return result;
                    }
                }
                else
                {
                    switch (_currentLanguage)
                    {

                        case "en":
                            msg = "User is not exist.";
                            break;
                        case "zh":
                            msg = "使用者不存在";
                            break;
                        default:
                            msg = "使用者不存在";
                            break;

                    }
                    result.IsSuccess = false;
                    result.Message = msg;
                    return result;
                }
            }
            else
            {
                switch (_currentLanguage)
                {

                    case "en":
                        msg = "Check field_id failed.";
                        break;
                    case "zh":
                        msg = "檢查field_id失敗";
                        break;
                    default:
                        msg = "檢查field_id失敗";
                        break;

                }
                result.IsSuccess = false;
                result.Message = msg;
                return result;
            }

            //檢查merchant_id是否存在
            url = _config["IP"] + "/merchant/list";
            httpMethod = HttpMethod.Post;
            parameters = new Dictionary<string, string>
                      {
                            { "token", token },

                        };

            apiResult = await _callApi.CallAPI(url, parameters, httpMethod);
            if (apiResult.IsSuccess)
            {
                var DepartmentsResponse = JsonConvert.DeserializeObject<DepartmentsResponse>(apiResult.Data.ToString());
                if (DepartmentsResponse.count > 0)
                {
                    var existDepartment = DepartmentsResponse.merchants.Where(m => m.merchant_id == Merchant_id).FirstOrDefault();
                    if (existDepartment == null)
                    {
                        switch (_currentLanguage)
                        {

                            case "en":
                                msg = "Merchint_id is not exist.";
                                break;
                            case "zh":
                                msg = "merchant_id不存在";
                                break;
                            default:
                                msg = "merchant_id不存在";
                                break;

                        }
                        result.IsSuccess = false;
                        result.Message = msg;
                        return result;
                    }

                }
                else
                {
                    switch (_currentLanguage)
                    {

                        case "en":
                            msg = "Merchint_id is not exist.";
                            break;
                        case "zh":
                            msg = "merchant_id不存在";
                            break;
                        default:
                            msg = "merchant_id不存在";
                            break;

                    }
                    result.IsSuccess = false;
                    result.Message = msg;
                    return result;
                }

            }
            else
            {
                switch (_currentLanguage)
                {

                    case "en":
                        msg = "Check merchint_id failed.";
                        break;
                    case "zh":
                        msg = "檢查merchant_id失敗";
                        break;
                    default:
                        msg = "檢查merchant_id失敗";
                        break;

                }
                result.IsSuccess = false;
                result.Message = msg;
                return result;
            }

            //檢查field_id是否存在
            url = _config["IP"] + "/v2/vault/get";
            httpMethod = HttpMethod.Post;
            parameters = new Dictionary<string, string>
                      {
                            { "Merchant_id", Merchant_id.ToString() },
                            { "id", vault_id.ToString() },
                            { "info", "FIELDS" },

                        };

            apiResult = await _callApi.CallAPI(url, parameters, httpMethod);
            if (apiResult.IsSuccess)
            {
                var FieldsResponse = JsonConvert.DeserializeObject<FieldsResponse>(apiResult.Data.ToString());
                if (FieldsResponse.fields.Count > 0)
                {
                    var existField = FieldsResponse.fields.Where(m => m.id == field_id).FirstOrDefault();
                    if (existField == null)
                    {
                        switch (_currentLanguage)
                        {

                            case "en":
                                msg = "Field_id is not exist.";
                                break;
                            case "zh":
                                msg = "field_id不存在";
                                break;
                            default:
                                msg = "field_id不存在";
                                break;

                        }
                        result.IsSuccess = false;
                        result.Message = msg;
                    }
                }
                else
                {
                    switch (_currentLanguage)
                    {

                        case "en":
                            msg = "Field_id is not exist.";
                            break;
                        case "zh":
                            msg = "field_id不存在";
                            break;
                        default:
                            msg = "field_id不存在";
                            break;

                    }
                    result.IsSuccess = false;
                    result.Message = msg;
                }

            }
            else
            {
                switch (_currentLanguage)
                {

                    case "en":
                        msg = "Field_id is not exist.";
                        break;
                    case "zh":
                        msg = "field_id不存在";
                        break;
                    default:
                        msg = "field_id不存在";
                        break;

                }
                result.IsSuccess = false;
                result.Message = msg;
                return result;
            }

            //加入部門

            url = _config["IP"] + "/merchant/adduser";
            httpMethod = HttpMethod.Post;

            var data = new[]
             {
                new {
                    userId = user_id.ToString(),
                    merchantId = Merchant_id.ToString()
                }
            };
            parameters = new Dictionary<string, string>
              {
                    { "token", token},
                    { "data", JsonConvert.SerializeObject(data)}
                                        //{ "data", """userId"":""1"",""merchantId"":""1""")
                };

            apiResult = await _callApi.CallAPI(url, parameters, httpMethod);
            if (!apiResult.IsSuccess)
            {
                var departmentResponse = JsonConvert.DeserializeObject<DepartmentsResponse>(apiResult.Data.ToString());
                if (departmentResponse.r != 0)
                {
                    switch (_currentLanguage)
                    {

                        case "en":
                            msg = "Add user into department failed.";
                            break;
                        case "zh":
                            msg = "加入部門失敗";
                            break;
                        default:
                            msg = "加入部門失敗";
                            break;

                    }
                    result.IsSuccess = false;
                    result.Message = msg + apiResult.Data.ToString();
                    return result;
                }
            }
            //加入vault
            var TokenVaultResponse = new TokenVaultResponse();
            url = _config["IP"] + "/merchant/vault/access";
            httpMethod = HttpMethod.Post;

            parameters = new Dictionary<string, string>
              {
                    { "token", token},
                    { "vault_id", vault_id.ToString()},
                    { "access_code", "31"},
                    { "merchant_id", Merchant_id.ToString()},
                    { "user_id", user_id.ToString()},
                };

            apiResult = await _callApi.CallAPI(url, parameters, httpMethod);
            if (!apiResult.IsSuccess)
            {
                switch (_currentLanguage)
                {

                    case "en":
                        msg = "Field_id is not exist.";
                        break;
                    case "zh":
                        msg = "加入vault失敗";
                        break;
                    default:
                        msg = "加入vault失敗";
                        break;

                }
                result.IsSuccess = false;
                result.Message = msg;
                return result;
            }

            //加入欄位

            var FieldsResponse2 = new FieldsResponse();
            url = _config["IP"] + "/v2/vault";
            httpMethod = HttpMethod.Post;
            var addUserToField_data = new[]
            {
                    new
                {
                    action = "ADD",
                    id = user_id,
                    field_id = field_id,
                    allow_decrypt = "1",
                    allow_new = "1",
                    allow_update = "1",
                    allow_del = "1",
                    default_mask_id = "1"
                }
            };
            parameters = new Dictionary<string, string>
              {

                    { "id", vault_id.ToString()},
                    { "info", "USERS"},
                    { "Merchant_id", Merchant_id.ToString()},
                    { "data", JsonConvert.SerializeObject(addUserToField_data)},
                };

            apiResult = await _callApi.CallAPI(url, parameters, httpMethod);
            if (apiResult.IsSuccess)
            {
                FieldsResponse2 = JsonConvert.DeserializeObject<FieldsResponse>(apiResult.Data.ToString());
                if (FieldsResponse2.failInfo != null)
                {
                    switch (_currentLanguage)
                    {

                        case "en":
                            msg = "Add user into Field_id failed.";
                            break;
                        case "zh":
                            msg = "加入Fields失敗";
                            break;
                        default:
                            msg = "加入Fields失敗";
                            break;

                    }
                    result.IsSuccess = false;
                    result.Message = msg + FieldsResponse2.m;
                    return result;
                }
                else
                {
                    switch (_currentLanguage)
                    {

                        case "en":
                            msg = "Add user into fields Success.";
                            break;
                        case "zh":
                            msg = "加入Fields成功";
                            break;
                        default:
                            msg = "加入Fields成功";
                            break;

                    }
                    result.IsSuccess = true;
                    result.Message = msg;
                    return result;
                }


            }
            else
            {
                switch (_currentLanguage)
                {

                    case "en":
                        msg = "Add user into Field_id failed.";
                        break;
                    case "zh":
                        msg = "加入Fields失敗";
                        break;
                    default:
                        msg = "加入Fields失敗";
                        break;

                }
                result.IsSuccess = false;
                result.Message = msg + apiResult.Data.ToString();
                return result;
            }




        }

        /// <summary>
        /// 欄位移除'使用者 ajax
        /// </summary>
        /// <param name="requestData"></param>
        /// <returns></returns>
        [Authorize(Policy = "AdminOnly")]
        [HttpPost]
        public async Task<ResultModel> DelUsers([FromBody] JsonElement requestData)
        {
            string msg;
            var result = new ResultModel();
            int Merchant_id = requestData.GetProperty("Merchant_id").GetInt32();
            int vault_id = requestData.GetProperty("vault_id").GetInt32();
            int field_id = requestData.GetProperty("field_id").GetInt32();
            int user_id = requestData.GetProperty("user_id").GetInt32();


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

            //檢查user_id是否存在
            var url = _config["IP"] + "/user/list";
            var httpMethod = HttpMethod.Post;
            var types = new[] { "all" };
            var types_data = new { inc = types };
            var parameters = new Dictionary<string, string>
                      {
                            { "token", token },
                            { "types", JsonConvert.SerializeObject(types_data)},
                        { "email","1"},
                        { "phone","1"}

                        };

            var apiResult = await _callApi.CallAPI(url, parameters, httpMethod);
            if (apiResult.IsSuccess)
            {
                var UserResponse = JsonConvert.DeserializeObject<UserResponse>(apiResult.Data.ToString());
                if (UserResponse.userCount > 0)
                {
                    var existUser = UserResponse.Users.Where(u => u.uid == user_id).FirstOrDefault();
                    if (existUser == null)
                    {

                        switch (_currentLanguage)
                        {

                            case "en":
                                msg = "User_id is not exist.";
                                break;
                            case "zh":
                                msg = "user_id不存在";
                                break;
                            default:
                                msg = "user_id不存在";
                                break;
                        }
                        result.IsSuccess = false;
                        result.Message = msg;
                        return result;
                    }
                }
                else
                {

                    switch (_currentLanguage)
                    {

                        case "en":
                            msg = "User_id is not exist.";
                            break;
                        case "zh":
                            msg = "user_id不存在";
                            break;
                        default:
                            msg = "user_id不存在";
                            break;
                    }
                    result.IsSuccess = false;
                    result.Message = msg;
                    return result;
                }
            }
            else
            {

                switch (_currentLanguage)
                {

                    case "en":
                        msg = "Check field_id failed.";
                        break;
                    case "zh":
                        msg = "檢查field_id失敗";
                        break;
                    default:
                        msg = "檢查field_id失敗";
                        break;
                }
                result.IsSuccess = false;
                result.Message = msg;
                return result;
            }

            //檢查merchant_id是否存在
            url = _config["IP"] + "/merchant/list";
            httpMethod = HttpMethod.Post;
            parameters = new Dictionary<string, string>
                      {
                            { "token", token },

                        };

            apiResult = await _callApi.CallAPI(url, parameters, httpMethod);
            if (apiResult.IsSuccess)
            {
                var DepartmentsResponse = JsonConvert.DeserializeObject<DepartmentsResponse>(apiResult.Data.ToString());
                if (DepartmentsResponse.count > 0)
                {
                    var existDepartment = DepartmentsResponse.merchants.Where(m => m.merchant_id == Merchant_id).FirstOrDefault();
                    if (existDepartment == null)
                    {

                        switch (_currentLanguage)
                        {

                            case "en":
                                msg = "Merchant_id is not exist.";
                                break;
                            case "zh":
                                msg = "merchant_id不存在";
                                break;
                            default:
                                msg = "merchant_id不存在";
                                break;
                        }
                        result.IsSuccess = false;
                        result.Message = msg;
                        return result;
                    }

                }
                else
                {
                    result.IsSuccess = false;
                    result.Message = "merchant_id不存在";
                    return result;
                }

            }
            else
            {

                switch (_currentLanguage)
                {

                    case "en":
                        msg = "User_id is not exist.";
                        break;
                    case "zh":
                        msg = "檢查merchant_id失敗";
                        break;
                    default:
                        msg = "檢查merchant_id失敗";
                        break;
                }
                result.IsSuccess = false;
                result.Message = msg;
                return result;
            }

            //檢查field_id是否存在
            url = _config["IP"] + "/v2/vault/get";
            httpMethod = HttpMethod.Post;
            parameters = new Dictionary<string, string>
                      {
                            { "Merchant_id", Merchant_id.ToString() },
                            { "id", vault_id.ToString() },
                            { "info", "FIELDS" },

                        };

            apiResult = await _callApi.CallAPI(url, parameters, httpMethod);
            if (apiResult.IsSuccess)
            {
                var FieldsResponse = JsonConvert.DeserializeObject<FieldsResponse>(apiResult.Data.ToString());
                if (FieldsResponse.fields.Count > 0)
                {
                    var existField = FieldsResponse.fields.Where(m => m.id == field_id).FirstOrDefault();
                    if (existField == null)
                    {
                        result.IsSuccess = false;
                        result.Message = "field_id不存在";
                    }
                }
                else
                {
                    result.IsSuccess = false;
                    result.Message = "field_id不存在";
                }

            }
            else
            {
                result.IsSuccess = false;
                result.Message = "檢查field_id失敗";
                return result;
            }

            //加入部門

            url = _config["IP"] + "/merchant/adduser";
            httpMethod = HttpMethod.Post;

            var data = new[]
             {
                new {
                    userId = user_id.ToString(),
                    merchantId = Merchant_id.ToString()
                }
            };
            parameters = new Dictionary<string, string>
              {
                    { "token", token},
                    { "data", JsonConvert.SerializeObject(data)}
                                        //{ "data", """userId"":""1"",""merchantId"":""1""")
                };

            apiResult = await _callApi.CallAPI(url, parameters, httpMethod);
            if (!apiResult.IsSuccess)
            {
                var departmentResponse = JsonConvert.DeserializeObject<DepartmentsResponse>(apiResult.Data.ToString());
                if (departmentResponse.r != 0)
                {
                    result.IsSuccess = false;
                    result.Message = "加入部門失敗" + apiResult.Data.ToString();
                    return result;
                }
            }
            //加入vault
            var TokenVaultResponse = new TokenVaultResponse();
            url = _config["IP"] + "/merchant/vault/access";
            httpMethod = HttpMethod.Post;

            parameters = new Dictionary<string, string>
              {
                    { "token", token},
                    { "vault_id", vault_id.ToString()},
                    { "access_code", "31"},
                    { "merchant_id", Merchant_id.ToString()},
                    { "user_id", user_id.ToString()},
                };

            apiResult = await _callApi.CallAPI(url, parameters, httpMethod);
            if (!apiResult.IsSuccess)
            {

                result.IsSuccess = false;
                result.Message = "加入vault失敗";
                return result;
            }

            //加入欄位

            var FieldsResponse2 = new FieldsResponse();
            url = _config["IP"] + "/v2/vault";
            httpMethod = HttpMethod.Post;
            var addUserToField_data = new[]
            {
                    new
                {
                    action = "ADD",
                    id = user_id,
                    field_id = field_id,
                    allow_decrypt = "1",
                    allow_new = "1",
                    allow_update = "1",
                    allow_del = "1",
                    default_mask_id = "1"
                }
            };
            parameters = new Dictionary<string, string>
              {

                    { "id", vault_id.ToString()},
                    { "info", "USERS"},
                    { "Merchant_id", Merchant_id.ToString()},
                    { "data", JsonConvert.SerializeObject(addUserToField_data)},
                };

            apiResult = await _callApi.CallAPI(url, parameters, httpMethod);
            if (apiResult.IsSuccess)
            {
                FieldsResponse2 = JsonConvert.DeserializeObject<FieldsResponse>(apiResult.Data.ToString());
                if (FieldsResponse2.failInfo != null)
                {
                    result.IsSuccess = false;
                    result.Message = "加入Fields失敗" + FieldsResponse2.m;
                    return result;
                }
                else
                {
                    result.IsSuccess = true;
                    result.Message = "加入Fields成功";
                    return result;
                }


            }
            else
            {
                result.IsSuccess = false;
                result.Message = "加入Fields失敗" + apiResult.Data.ToString();
                return result;
            }




        }


        [HttpGet]
        public async Task<IActionResult> ListMasks(int Merchant_id, int vault_id, int field_id)
        {

            // 確認使用者是否已經登入
            if (!User.Identity.IsAuthenticated)
            {
                return RedirectToAction("Login", "User");
            }

            ViewBag.Merchant_id = Merchant_id;
            ViewBag.vault_id = vault_id;
            ViewBag.field_id = field_id;

            // 構建包含參數的查詢字串
            var queryString = new RouteValueDictionary {
                { "Merchant_id", Merchant_id },
                { "vault_id", vault_id },
                { "field_id", field_id },
            };

            #region list mask
            var url = _config["IP"] + "/v2/vault/get";
            var httpMethod = HttpMethod.Post;
            // 取得使用者的 "token" Claim 值
            string token = User.FindFirstValue("token");

            var parameters = new Dictionary<string, string>
              {
                    { "Merchant_id", Merchant_id.ToString() },
                    { "id", vault_id.ToString() },
                    { "info", "INFO" }

                };

            var 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.Count > 0)
                    {
                        ViewBag.VaultName = TokenVaultResponse.info[0].name;
                    }
                }
            }


            parameters = new Dictionary<string, string>
              {
                    { "Merchant_id", Merchant_id.ToString() },
                    { "id", vault_id.ToString() },
                    { "info", "MASKS" }

                };

            apiResult = await _callApi.CallAPI(url, parameters, httpMethod);
            if (apiResult.IsSuccess)
            {
                var FieldsResponse = JsonConvert.DeserializeObject<FieldsResponse>(apiResult.Data.ToString());
                if (FieldsResponse.r == 0)
                {
                    if (FieldsResponse.fields.Count > 0)
                    {
                        var existField = FieldsResponse.fields.Where(f => f.id == field_id).FirstOrDefault();
                        if (existField != null)
                        {
                            ViewBag.FieldName = existField.name;
                            return View(existField.masks);
                        }

                    }


                }
            }
            #endregion
            return RedirectToAction("ListFields", queryString);
        }

        //新增欄位 
        [Authorize(Policy = "AdminOnly")]
        [HttpPost]
        public async Task<IActionResult> CreateField(FieldForCreate FieldForCreate)
        {
            // 構建包含參數的查詢字串
            var queryString = new RouteValueDictionary {
                { "Merchant_id", FieldForCreate.merchant_id },
                { "vault_id", FieldForCreate.vault_id }
                      };
            try
            {


                var url = _config["IP"] + "/v2/vault";
                // 確認使用者是否已經登入
                if (!User.Identity.IsAuthenticated)
                {

                    return RedirectToAction("Login", "User");

                }
                if (string.IsNullOrEmpty(FieldForCreate.name))
                {

                    TempData["IsSuccess"] = false;
                    TempData["msg"] = "名稱不能為空";
                    return RedirectToAction("ListFields", queryString);
                }


                var httpMethod = HttpMethod.Post;
                // 取得使用者的 "token" Claim 值
                string token = User.FindFirstValue("token");
                //if (enabled == "on")
                //    enabled = "true";
                //else
                //    enabled = "false";
                var fieldData = new[]
                  {
                    new
                    {
                        action = "ADD",
                        name = FieldForCreate.name,
                        desc = FieldForCreate.name,
                        format_exp = FieldForCreate.format_exp,
                        enabled = true
                    }
                };


                var parameters = new Dictionary<string, string>
              {
                { "Merchant_id", FieldForCreate.merchant_id.ToString() },
                { "info","FIELDS"},
                { "id", FieldForCreate.vault_id.ToString() },
                    { "data",JsonConvert.SerializeObject(fieldData)}

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

                            TempData["IsSuccess"] = true;
                            TempData["msg"] = "Create success";
                            return RedirectToAction("ListFields", queryString);

                        }

                        TempData["IsSuccess"] = false;
                        TempData["msg"] = System.Text.RegularExpressions.Regex.Unescape(string.Join(", ", FieldsResponse.failInfo));
                        return RedirectToAction("ListFields", queryString);

                    }
                    else
                    {
                        TempData["IsSuccess"] = false;
                        TempData["msg"] = apiResult.Message;

                        return RedirectToAction("ListFields", queryString);
                    }


                }

            }
            catch (Exception e)
            {

                TempData["IsSuccess"] = false;
                TempData["msg"] = e.Message + e.InnerException?.Message;
                return RedirectToAction("ListFields", queryString);
            }


            TempData["IsSuccess"] = false;
            TempData["msg"] = "Create fail.";
            return RedirectToAction("ListFields", queryString);
        }

        private int GetValidIntegerValue(string input)
        {
            if (int.TryParse(input, out int value))
            {
                return value;
            }
            else
            {
                return 0;
            }
        }

        //新增MASK ajax
        [Authorize(Policy = "AdminOnly")]
        [HttpPost]
        public async Task<ResultModel> CreateMask(IFormCollection form)
        {
            var result = new ResultModel();


            try
            {

                var url = _config["IP"] + "/v2/vault";

                if (string.IsNullOrEmpty(form["name"]))
                {

                    result.IsSuccess = false;
                    result.Message = "名稱不能為空";
                    return result;
                }


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

                var setting = new
                {
                    mask = GetValidIntegerValue(form["mask"]),
                    size_init = GetValidIntegerValue(form["size_init"]),
                    size_end = GetValidIntegerValue(form["size_end"]),
                };

                var fieldData = new[]
                  {
                        new
                        {
                            action = "ADD",
                            field_id=Convert.ToInt32(form["field_id"]),
                           name=form["name"].ToString(),
                            type = Convert.ToInt32(form["type"]),
                            setting = System.Text.Json.JsonSerializer.Serialize(setting)

            }
                    };
                string namstext = form["name"];

                var parameters = new Dictionary<string, string>
                  {
                    { "Merchant_id",form["merchant_id"] },
                    { "info","MASKS"},
                    { "id", form["vault_id"]},
                    { "data",JsonConvert.SerializeObject(fieldData)}

                    };
                var apiResult = await _callApi.CallAPI(url, parameters, httpMethod);
                if (apiResult.IsSuccess)
                {
                    var Response = JsonConvert.DeserializeObject<Response>(apiResult.Data.ToString());
                    if (Response.r == 0)
                    {
                        if (Response.failInfo == null)
                        {
                            result.IsSuccess = true;
                            result.Message = "Create success";
                            return result;

                        }

                        result.IsSuccess = false;
                        result.Message = System.Text.RegularExpressions.Regex.Unescape(string.Join(", ", Response.failInfo));
                        return result;

                    }
                    else
                    {
                        result.IsSuccess = false;
                        result.Message = Response.m.ToString();

                        return result;
                    }


                }

            }
            catch (Exception e)
            {

                result.IsSuccess = false;
                result.Message = e.Message + e.InnerException?.Message;
                return result;
            }


            result.IsSuccess = false;
            result.Message = "Create fail.";
            return result;
            //return View();
        }


        //刪除MASK ajax
        [Authorize(Policy = "AdminOnly")]
        [HttpPost]
        public async Task<ResultModel> DeleteMask(IFormCollection form)
        {
            var result = new ResultModel();


            try
            {

                var url = _config["IP"] + "/v2/vault";

                if (string.IsNullOrEmpty(form["name"]))
                {

                    result.IsSuccess = false;
                    result.Message = "名稱不能為空";
                    return result;
                }


                var httpMethod = HttpMethod.Post;
                // 取得使用者的 "token" Claim 值
                string token = User.FindFirstValue("token");
                var setting = new
                {
                    mask = Convert.ToInt32(form["mask"]),
                    size_init = Convert.ToInt32(form["size_init"]),
                    size_end = Convert.ToInt32(form["size_end"])
                };
                var fieldData = new[]
                  {
                        new
                        {
                            action = "MOD",
                            id=Convert.ToInt32(form["mask_id"]),
                           name=form["name"].ToString(),
                            type = Convert.ToInt32(form["type"]),
                            setting = System.Text.Json.JsonSerializer.Serialize(setting)

            }
                    };
                string namstext = form["name"];

                var parameters = new Dictionary<string, string>
                  {
                    { "Merchant_id",form["merchant_id"] },
                    { "info","MASKS"},
                    { "id", form["vault_id"]},
                    { "data",JsonConvert.SerializeObject(fieldData)}

                    };
                var apiResult = await _callApi.CallAPI(url, parameters, httpMethod);
                if (apiResult.IsSuccess)
                {
                    var Response = JsonConvert.DeserializeObject<Response>(apiResult.Data.ToString());
                    if (Response.r == 0)
                    {
                        if (Response.failInfo == null)
                        {
                            result.IsSuccess = true;
                            result.Message = "Create success";
                            return result;

                        }

                        result.IsSuccess = false;
                        result.Message = System.Text.RegularExpressions.Regex.Unescape(string.Join(", ", Response.failInfo));
                        return result;

                    }
                    else
                    {
                        result.IsSuccess = false;
                        result.Message = Response.m.ToString();

                        return result;
                    }


                }

            }
            catch (Exception e)
            {

                result.IsSuccess = false;
                result.Message = e.Message + e.InnerException?.Message;
                return result;
            }


            result.IsSuccess = false;
            result.Message = "Create fail.";
            return result;

        }


        //編輯MASK ajax
        [Authorize(Policy = "AdminOnly")]
        [HttpPost]
        public async Task<ResultModel> EditMask(IFormCollection form)
        {
            var result = new ResultModel();
            // var field_id = Convert.ToInt32(form["field_id"]);
            // #region list mask
            // var url = _config["IP"] + "/v2/vault/get";
            // var httpMethod = HttpMethod.Post;
            // // 取得使用者的 "token" Claim 值
            // string token = User.FindFirstValue("token");

            //var parameters = new Dictionary<string, string>
            //   {
            //         { "Merchant_id", form["Merchant_id"].ToString() },
            //         { "id", form["vault_id"].ToString() },
            //         { "info", "MASKS" }

            //     };

            // var apiResult = await _callApi.CallAPI(url, parameters, httpMethod);
            // if (apiResult.IsSuccess)
            // {
            //     var FieldsResponse = JsonConvert.DeserializeObject<FieldsResponse>(apiResult.Data.ToString());
            //     if (FieldsResponse.r == 0)
            //     {
            //         if (FieldsResponse.fields.Count > 0)
            //         {
            //             var existField = FieldsResponse.fields.Where(f => f.id == field_id).FirstOrDefault();
            //             if (existField != null)
            //             {
            //                 ViewBag.FieldName = existField.name;
            //                 return View(existField.masks);
            //             }

            //         }


            //     }
            // }
            // #endregion



            // try
            // {

            //     var url = _config["IP"] + "/v2/vault";

            //     if (string.IsNullOrEmpty(form["name"]))
            //     {

            //         result.IsSuccess = false;
            //         result.Message = "名稱不能為空";
            //         return result;
            //     }


            //     var httpMethod = HttpMethod.Post;
            //     // 取得使用者的 "token" Claim 值
            //     string token = User.FindFirstValue("token");
            //     var setting = new
            //     {
            //         mask = Convert.ToInt32(form["mask"]),
            //         size_init = Convert.ToInt32(form["size_init"]),
            //         size_end = Convert.ToInt32(form["size_end"])
            //     };
            //     var fieldData = new[]
            //       {
            //             new
            //             {
            //                 action = "ADD",
            //                 field_id=Convert.ToInt32(form["field_id"]),
            //                name=form["name"].ToString(),
            //                 type = Convert.ToInt32(form["type"]),
            //                 setting = System.Text.Json.JsonSerializer.Serialize(setting)

            // }
            //         };
            //     string namstext = form["name"];

            //     var parameters = new Dictionary<string, string>
            //       {
            //         { "Merchant_id",form["merchant_id"] },
            //         { "info","MASKS"},
            //         { "id", form["vault_id"]},
            //         { "data",JsonConvert.SerializeObject(fieldData)}

            //         };
            //     var apiResult = await _callApi.CallAPI(url, parameters, httpMethod);
            //     if (apiResult.IsSuccess)
            //     {
            //         var Response = JsonConvert.DeserializeObject<Response>(apiResult.Data.ToString());
            //         if (Response.r == 0)
            //         {
            //             if (Response.failInfo == null)
            //             {
            //                 result.IsSuccess = true;
            //                 result.Message = "Create success";
            //                 return result;

            //             }

            //             result.IsSuccess = false;
            //             result.Message = System.Text.RegularExpressions.Regex.Unescape(string.Join(", ", Response.failInfo));
            //             return result;

            //         }
            //         else
            //         {
            //             result.IsSuccess = false;
            //             result.Message = Response.m.ToString();

            //             return result;
            //         }


            //     }

            // }
            // catch (Exception e)
            // {

            //     result.IsSuccess = false;
            //     result.Message = e.Message + e.InnerException?.Message;
            //     return result;
            // }


            // result.IsSuccess = false;
            // result.Message = "Create fail.";
            return result;


        }


        [Authorize(Policy = "AdminOnly")]
        [HttpPost]
        public async Task<IActionResult> ListTokenVaultAjax(int merchantId)
        {
            string msg;

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

            var url = _config["IP"] + "/v2/vault/get";
            var httpMethod = HttpMethod.Post;


            var parameters = new Dictionary<string, string>
              {
                    { "Merchant_id", merchantId.ToString()}
                };

            var 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.Count > 0)
                    {
                        var sortedData = TokenVaultResponse.info.OrderBy(a => a.vault_id);
                        switch (_currentLanguage)
                        {

                            case "en":
                                msg = "Disable";
                                break;
                            case "zh":
                                msg = "停用";
                                break;
                            default:
                                msg = "停用";
                                break;

                        }
                        string enabletext = msg;
                        // 轉出html
                        string outputHtml = "";
                        string permission;
                        string Fields;
                        switch (_currentLanguage)
                        {

                            case "en":
                                permission = "Permission";
                                Fields = "Fields";
                                break;
                            case "zh":
                                permission = "權限";
                                Fields = "欄位";
                                break;
                            default:
                                permission = "權限";
                                Fields = "欄位";
                                break;

                        }
                        foreach (var vault in sortedData)
                        {
                            if (vault.enabled == 1)
                            {
                                switch (_currentLanguage)
                                {

                                    case "en":
                                        msg = "Enable";
                                        break;
                                    case "zh":
                                        msg = "啟用";
                                        break;
                                    default:
                                        msg = "啟用";
                                        break;
                                }
                                        enabletext = msg;
                            }

                            string htmlCode = @$"<tr class=""expense-color"">
													<td><a asp-action=""Detail"" asp-route-Id=""{vault.vault_id}""> {vault.vault_id}</a></td>
													<td class=""tokenVaultRow"" data-merchantid=""{merchantId}""  data-vaultid=""{vault.vault_id}"" >{vault.name}</td>
													<td>{vault.desc}</td>
													<td>{vault.type}</td>
													<td>{vault.created}</td>
                                                    <td>{enabletext}</td>
                                                      <td>
                                                        <button class=""btn btnPermission btn-sm"" data-toggle=""modal"" data-target=""#permission"">{permission}</button>
                                                        <button class=""btn btnPermission btn-sm fieldsBtn"" data-Merchant_id=""{merchantId}"" data-vault_id=""{vault.vault_id}"" >{Fields}</button>
                                                      </td>
													<td>{vault.tokenCount}</td>
													<td>{vault.userCount}</td>
												
												</tr>";
                            outputHtml += htmlCode;
                        }
                        return Content(outputHtml);
                    }

                    else
                    {
                        return Ok();
                    }

                }
                else
                {
                    return Ok();
                }

            }
            else
            {
                return Ok();
            }

        }

        [Authorize(Policy = "AdminOnly")]
        [HttpGet]
        public async Task<IActionResult> CreateTokenVault()
        {
            #region 取得部門列表
            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 apiResult = await _callApi.CallAPI(url, parameters, httpMethod);
            if (apiResult.IsSuccess)
            {
                DepartmentsResponse = JsonConvert.DeserializeObject<DepartmentsResponse>(apiResult.Data.ToString());
                if (DepartmentsResponse.r == 0)
                {

                    ViewBag.DepartmentsList = (from o in DepartmentsResponse.merchants
                                               select new SelectListItem
                                               {
                                                   Value = o.merchant_id.ToString(),
                                                   Text = o.merchant_id + "_" + o.name
                                               }).ToList();
                }
            }

            #endregion
            return View();
        }

        [Authorize(Policy = "AdminOnly")]
        [HttpGet("/TokenVault/Edit/{id}")]
        public async Task<IActionResult> Edit(int id, [FromQuery] int merchantid)
        {
            #region 取得部門列表
            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 apiResult = await _callApi.CallAPI(url, parameters, httpMethod);
            if (apiResult.IsSuccess)
            {
                DepartmentsResponse = JsonConvert.DeserializeObject<DepartmentsResponse>(apiResult.Data.ToString());
                if (DepartmentsResponse.r == 0)
                {

                    ViewBag.DepartmentsList = (from o in DepartmentsResponse.merchants
                                               select new SelectListItem
                                               {
                                                   Value = o.merchant_id.ToString(),
                                                   Text = o.merchant_id + "_" + o.name
                                               }).ToList();
                }
            }

            #endregion

            httpMethod = HttpMethod.Post;
            url = _config["IP"] + "/v2/vault/get";
            parameters = new Dictionary<string, string>
              {

                { "Merchant_id",merchantid.ToString()},
                { "id",id.ToString()},
                { "info","INFO"}

            };
            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.Count > 0)
                    {
                        return View(TokenVaultResponse.info[0]);
                    }
                    else
                    {
                        RedirectToAction("List");
                    }

                }
            }


            return View();
        }

        [Authorize(Policy = "AdminOnly")]
        [HttpPost]
        public async Task<IActionResult> CreateTokenVault(TokenVaultForCreate tokenVault)
        {
            string msg;

            #region 取得部門列表
            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 apiResult = await _callApi.CallAPI(url, parameters, httpMethod);
            if (apiResult.IsSuccess)
            {
                DepartmentsResponse = JsonConvert.DeserializeObject<DepartmentsResponse>(apiResult.Data.ToString());
                if (DepartmentsResponse.r == 0)
                {

                    ViewBag.DepartmentsList = (from o in DepartmentsResponse.merchants
                                               select new SelectListItem
                                               {
                                                   Value = o.merchant_id.ToString(),
                                                   Text = o.merchant_id + "_" + o.name
                                               }).ToList();
                }
            }

            #endregion

            if (string.IsNullOrEmpty(tokenVault.name))
            {
                switch (_currentLanguage)
                {

                    case "en":
                        msg = " can't be empty.";
                        break;
                    case "zh":
                        msg = "不能為空";
                        break;
                    default:
                        msg = "不能為空";
                        break;
                }
                        ModelState.AddModelError("name", msg);
            }
            if (tokenVault.merchant_id == 0)
            {
                switch (_currentLanguage)
                {

                    case "en":
                        msg = " can't be empty.";
                        break;
                    case "zh":
                        msg = "部門不能為空";
                        break;
                    default:
                        msg = "部門不能為空";
                        break;
                }
                ModelState.AddModelError("merchant_id", msg);

            }
            if (!ModelState.IsValid)
            {
                return View(tokenVault);
            }



            url = _config["IP"] + "/tsp/merchant/vault/add";

            parameters = new Dictionary<string, string>
              {
                    { "token", token },
                    { "data",JsonConvert.SerializeObject(tokenVault)}

                };
            apiResult = await _callApi.CallAPI(url, parameters, httpMethod);
            if (apiResult.IsSuccess)
            {
                var userAddResponse = JsonConvert.DeserializeObject<UserAddResponse>(apiResult.Data.ToString());
                if (userAddResponse.r == 0)
                {
                    switch (_currentLanguage)
                    {

                        case "en":
                            msg = "Create Token Vault success.";
                            break;
                        case "zh":
                            msg = "新增Token Vault成功";
                            break;
                        default:
                            msg = "新增Token Vault成功";
                            break;
                    }
                    TempData["IsSuccess"] = true;
                    TempData["msg"] = msg;
                    return RedirectToAction("List");
                }
                else
                {
                    TempData["IsSuccess"] = false;
                    TempData["msg"] = JsonConvert.SerializeObject(userAddResponse.m);
                    #region 取得部門列表
                    DepartmentsResponse = new DepartmentsResponse();
                    url = _config["IP"] + "/merchant/list";
                    httpMethod = HttpMethod.Post;
                    // 取得使用者的 "token" Claim 值

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

                };

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

                            ViewBag.DepartmentsList = (from o in DepartmentsResponse.merchants
                                                       select new SelectListItem
                                                       {
                                                           Value = o.merchant_id.ToString(),
                                                           Text = o.merchant_id + "_" + o.name
                                                       }).ToList();
                        }
                    }

                    #endregion
                    return View(tokenVault);
                }


            }



            return View();
        }


    }


}