using Backend.Models;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging;
using Newtonsoft.Json;
using Repository.BackendRepository.Interface;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Threading.Tasks;

namespace Backend.ApiControllers
{
    public class DeviceApiController : MyBaseApiController<DeviceApiController>
    {
        private readonly IBackendRepository backendRepository;
        public DeviceApiController(IBackendRepository backendRepository)
        {
            this.backendRepository = backendRepository;
        }

        /// <summary>
        /// 修改設備名稱
        /// </summary>
        /// <param name="change"></param>
        /// <returns></returns>
        [HttpPost]
        [Route("api/Device/SaveChangeName")]
        public async Task<ActionResult<ApiResult<string>>> SaveChangeName(ChangeName change)
        {
            ApiResult<string> apiResult = new ApiResult<string>();
            if (!jwtlife)
            {
                apiResult.Code = "5000";
                return BadRequest(apiResult);
            }
            try
            {
                if (change.ChooseTable == 0)
                {
                    //一般設備
                    var GetOne = await backendRepository.GetOneAsync<Device>("device", $" device_number = '{change.TagName}'");
                    if (GetOne == null)
                    {
                        apiResult.Data = "查無資料";
                        apiResult.Code = "0001";
                    }
                    else
                    {
                        //修改設備名稱
                        Dictionary<string, object> ChangeN = new Dictionary<string, object>();
                        ChangeN = new Dictionary<string, object>()
                        {
                            { "@full_name", change.ChangeN},
                            { "@updated_at",DateTime.Now},
                        };
                        await backendRepository.UpdateOneByCustomTable(ChangeN, "device", $" device_number = '{change.TagName}'");

                        //記錄使用者操作紀錄
                        Dictionary<string, object> userOperatorLog = new Dictionary<string, object>()
                        {
                            { "@user_guid", myUser.userinfo_guid },
                            { "@operation_type", 1 }, //1:名稱修改
                            { "@building_tag", GetOne.device_building_tag },
                            { "@main_system_tag", GetOne.device_system_tag },
                            { "@sub_system_tag", GetOne.device_name_tag },
                            { "@floor_tag", GetOne.device_floor_tag },
                            { "@device_guid", GetOne.Device_guid },
                            { "@action_name", "修改名稱" },
                            { "@parameter", JsonConvert.SerializeObject(change) },
                        };

                        await backendRepository.AddOneByCustomTable(userOperatorLog, "operation_log");

                        apiResult.Data = "更改成功";
                        apiResult.Code = "0000";
                    }
                }
                else
                {
                    //燈控設備
                    var GetOne = await backendRepository.GetOneAsync<string>("device_master", $" device_master_number = '{change.TagName}'");
                    if (GetOne == null)
                    {
                        apiResult.Data = "查無資料";
                        apiResult.Code = "0001";
                    }
                    else
                    {
                        Dictionary<string, object> ChangeN = new Dictionary<string, object>();
                        ChangeN = new Dictionary<string, object>()
                        {
                            { "@device_master_full_name", change.ChangeN},
                            { "@updated_at",DateTime.Now},
                        };
                        await backendRepository.UpdateOneByCustomTable(ChangeN, "device_master", $" device_master_number = '{change.TagName}'");

                        ////記錄使用者操作紀錄
                        //Dictionary<string, object> userOperatorLog = new Dictionary<string, object>()
                        //{
                        //    { "@user_guid", myUser },
                        //    { "@operation_type", 1 }, //1:名稱修改
                        //    { "@building_guid", GetOne.Building_guid },
                        //    { "@main_system_guid", GetOne.Main_system_guid },
                        //    { "@sub_system_guid", GetOne.Sub_system_guid },
                        //    { "@floor_guid", GetOne.Floor_guid },
                        //    { "@device_guid", GetOne.Device_guid },
                        //    { "@action_name", "修改名稱" },
                        //    { "@parameter", JsonConvert.SerializeObject(change) },
                        //};

                        //await backendRepository.AddOneByCustomTable(userOperatorLog, "operation_log");

                        apiResult.Data = "更改成功";
                        apiResult.Code = "0000";
                    }
                }
            }
            catch (Exception exception)
            {
                apiResult.Code = "9999";
                Logger.LogError("【" + controllerName + "/" + actionName + "】" + exception.Message);
                return Ok(apiResult);
            }
            return Ok(apiResult);
        }
    }
}