using DocumentFormat.OpenXml.Math;
using DocumentFormat.OpenXml.Spreadsheet;
using Infrastructure;
using Infrastructure.Helpers.Excel;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using NPOI.SS.Formula.Functions;
using OpenAuth.App.ServiceApp.DroneSsnydManage;
using OpenAuth.App.ServiceApp.DroneSsnydManage.Request;
using OpenAuth.Repository.Domain;

namespace OpenAuth.WebApi.Controllers.ServiceControllers
{
    /// <summary>
    /// 批后监管--项目信息
    /// </summary>
    [Route("api/[controller]/[action]")]
    [ApiController]
    public class DroneSsnyController : ControllerBase
    {
        DroneSsnyApp droneSsnyApp;

        public DroneSsnyController(DroneSsnyApp droneSsnyApp)
        {
            this.droneSsnyApp = droneSsnyApp;
        }

        /// <summary>
        /// 到期预警
        /// </summary>
        /// <param name="xiangmumc">项目名称</param>
        /// <param name="countyid">县</param>
        /// <param name="streetid">镇</param>
        /// <param name="pageIndex"></param>
        /// <param name="pageSize"></param>
        /// <returns></returns>
        [HttpGet]
        public Response<PageInfo<List<DroneSsnyd>>> TimeoutWarning(string xiangmumc, string countyid, string streetid, int page, int limit)
        {
            var response = new Response<PageInfo<List<DroneSsnyd>>>();
            try
            {
                response.Result = droneSsnyApp.TimeoutWarning(xiangmumc, countyid, streetid,page, limit);
            }
            catch (Exception ex)
            {
                response.Code = 500;
                response.Message = ex.InnerException?.Message ?? ex.Message;
            }

            return response;
        }

        /// <summary>
        /// 超期报警
        /// </summary>
        /// <param name="xiangmumc">项目名称</param>
        /// <param name="countyid">县</param>
        /// <param name="streetid">镇</param>
        /// <param name="pageIndex"></param>
        /// <param name="pageSize"></param>
        /// <returns></returns>
        [HttpGet]
        public Response<PageInfo<List<DroneSsnyd>>> TimeOutAlarmList(string xiangmumc, string countyid,string streetid,int page, int limit)
        {
            var response = new Response<PageInfo<List<DroneSsnyd>>>();
            try
            {
                response.Result = droneSsnyApp.TimeOutAlarmList(xiangmumc, countyid, streetid, page, limit);
            }
            catch (Exception ex)
            {
                response.Code = 500;
                response.Message = ex.InnerException?.Message ?? ex.Message;
            }

            return response;
        }
        
        /// <summary>
        /// 历史项目
        /// </summary>
        /// <param name="req"></param>
        /// <returns></returns>
        [HttpGet]
        public Response<PageInfo<List<DroneSsnyd>>> HistoryProject(DroneSnnyAppPageReq req)
        {
            var response = new Response<PageInfo<List<DroneSsnyd>>>();
            try
            {
                response.Result = droneSsnyApp.HistoryProject(req);
            }
            catch (Exception ex)
            {
                response.Code = 500;
                response.Message = ex.InnerException?.Message ?? ex.Message;
            }

            return response;
        }

        /// <summary>
        /// 项目变更列表
        /// </summary>
        /// <param name="req"></param>
        /// <returns></returns>
        [HttpGet]
        public Response<PageInfo<List<DroneSsnyd>>> ProjectChange(DroneSnnyAppPageReq req)
        {
            var response = new Response<PageInfo<List<DroneSsnyd>>>();
            try
            {
                response.Result = droneSsnyApp.ProjectChange(req);
            }
            catch (Exception ex)
            {
                response.Code = 500;
                response.Message = ex.InnerException?.Message ?? ex.Message;
            }

            return response;
        }

        #region 预警报警导出
        /// <summary>
        /// 超期预警数据导出
        /// </summary>
        /// <param name="import"></param>
        /// <returns></returns>
        [HttpPost]
        public IActionResult TimeoutWarningExport([FromQuery] TimeOutReq import)
        {
            var data = new Response();
            List<string> headers = null;
            headers = new List<string> { "项目编号", "项目名称", "乡镇", "村庄", "权利人", "行政区划", "备案编号", "项目开始时间", "项目结束时间", "项目当前用途", "设施农业申请用地面积", "生产设施用地", "辅助设施用地","下发时间","项目状态"};
            var response = droneSsnyApp.TimeoutWarningExport(import.xiangmumc, import.countyid, import.streetid);
            if (response.Count > 0)
            {
                var excelRes = droneSsnyApp.ListToExcel(response, headers);
                if (excelRes.Code == 200)
                {
                    return File(excelRes.Result.ToArray(),
                        "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
                        "超期预警" + DateTime.Now.ToString("yyyyMMddHHmmss") + ".xls");
                }
                else
                {
                    data.Code = excelRes.Code;
                    data.Message = "导出失败";
                }
            }
            else
            {
                data.Code = 300;
                data.Message = "暂无数据";
            }
            return Ok(data);
        }


        /// <summary>
        /// 超期报警数据导出
        /// </summary>
        /// <param name="import"></param>
        /// <returns></returns>
        [HttpPost]
        public IActionResult TimeoutAlarmExport([FromQuery] TimeOutReq import)
        {
            var data = new Response();
            List<string> headers = null;
            headers = new List<string> { "项目编号", "项目名称", "乡镇", "村庄", "权利人", "行政区划", "备案编号", "项目开始时间", "项目结束时间", "项目当前用途", "设施农业申请用地面积", "生产设施用地", "辅助设施用地", "下发时间", "项目状态" };
            var response = droneSsnyApp.TimeOutAlarmExport(import.xiangmumc, import.countyid, import.streetid);
            if (response.Count > 0)
            {
                var excelRes = droneSsnyApp.ListToExcel(response, headers);
                if (excelRes.Code == 200)
                {
                    return File(excelRes.Result.ToArray(),
                        "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
                        "超期报警" + DateTime.Now.ToString("yyyyMMddHHmmss") + ".xls");
                }
                else
                {
                    data.Code = excelRes.Code;
                    data.Message = "导出失败";
                }
            }
            else
            {
                data.Code = 300;
                data.Message = "暂无数据";
            }
            return Ok(data);
        }

        #endregion

        #region 项目列表
        /// <summary>
        /// 项目列表
        /// </summary>
        /// <param name="xiangmumc">项目名称</param>
        /// <param name="countyid">县</param>
        /// <param name="streetid">镇</param>
        /// <param name="pageIndex"></param>
        /// <param name="pageSize"></param>
        /// <returns></returns>
        [HttpGet]
        [AllowAnonymous]
        public Response<PageInfo<List<DroneSsnyd>>> GetDronssnydList(string xiangmumc, string countyid, string streetid, int page, int limit)
        {
            var response = new Response<PageInfo<List<DroneSsnyd>>>();
            try
            {
                response.Result = droneSsnyApp.GetDronssnydList(xiangmumc, countyid, streetid, page, limit);
            }
            catch (Exception ex)
            {
                response.Code = 500;
                response.Message = ex.InnerException?.Message ?? ex.Message;
            }

            return response;
        }
        #endregion
    }
}