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

namespace Backend.Controllers
{
    public class EmergencyRecordController : MybaseController<EmergencyRecordController>
    {
        private readonly IBackendRepository backendRepository;
        public EmergencyRecordController(IBackendRepository backendRepository)
        {
            this.backendRepository = backendRepository;
        }
        public IActionResult Index()
        {
            return View();
        }

        [HttpPost]
        public async Task<ActionResult> EmergencyRecordTable(EmergencyRecordEventPost post)
        {
            List<EmergencyRecordEventTable> EmergencyRecordEvent = new List<EmergencyRecordEventTable>();
            ApiResult<List<EmergencyRecordEventTable>> apiResult = new ApiResult<List<EmergencyRecordEventTable>>();
            try
            {
                var sqlplus = "";
                if(post.selectaType != 2 )
                {
                    sqlplus = $"and ee.type = '{post.selectaType}'";
                }
                if (post.dateranger != null)
                {
                    var date = post.dateranger.Replace(" ", "").Split("-");
                    sqlplus += $"and ee.created_at between '{date[0].Replace(" / ", " - ")} 00:00:00' and '{date[1].Replace(" / ", " - ")} 23:59:59'";
                }

                EmergencyRecordEvent = await backendRepository.GetAllAsync<EmergencyRecordEventTable>($@"
                    select d.device_number device_name,v.system_key disaster_name,ee.*,b.full_name building_name from emergency_event ee 
                    left join (select * from variable v where v.system_type = 'disaster') v on v.system_value = ee.disaster
                    left join device d on d.device_guid = ee.device_guid 
                    left join building b on b.building_guid = ee.building_guid
                    where ee.deleted = 0 and ee.building_guid = '{post.selectaBuild}' and ee.disaster = '{post.selectaDisaster}'  {sqlplus}
                    ");
                apiResult.Code = "0000";
                apiResult.Data = EmergencyRecordEvent;
            }
            catch (Exception exception)
            {
                apiResult.Code = "9999";
                apiResult.Msg = "系統內部錯誤,請聯絡管理者。";
                Logger.LogError("【" + controllerName + "/" + actionName + "】");
                Logger.LogError("【" + controllerName + "/" + actionName + "】" + exception.Message);
            }
            var result = Json(new
            {
                data = apiResult
            });
            return result;
        }


        [HttpPost]
        public async Task<ActionResult> EmergencyItemTable(string event_guid)
        {
            List<EmergencyRecordItem> EmergencyRecordEvent = new List<EmergencyRecordItem>();
            ApiResult<List<EmergencyRecordItem>> apiResult = new ApiResult<List<EmergencyRecordItem>>();
            try
            {
                EmergencyRecordEvent = await backendRepository.GetAllAsync<EmergencyRecordItem>($@"
                    select * from emergency_item where event_guid = '{event_guid}' order by created_at desc
                    ");
                apiResult.Code = "0000";
                apiResult.Data = EmergencyRecordEvent;
            }
            catch (Exception exception)
            {
                apiResult.Code = "9999";
                apiResult.Msg = "系統內部錯誤,請聯絡管理者。";
                Logger.LogError("【" + controllerName + "/" + actionName + "】");
                Logger.LogError("【" + controllerName + "/" + actionName + "】" + exception.Message);
            }
            var result = Json(new
            {
                data = apiResult
            });
            return result;
        }
    }
}