using Ropin.Inspection.Model;
using Ropin.Inspection.Model.Entities;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;

namespace Ropin.Inspection.Repository
{
    public class TbdmCodeRepository : RepositoryBase<TBDM_CodeMain, string>, ITbdmCodeRepository
    {
        public TbdmCodeRepository(InspectionDbContext DbContext) : base(DbContext)
        {

        }
        public async Task<List<TbdmCodeViewModel>> GetProvListTreeAsync()
        {

            var CodeMain = DbContext.TBDM_CodeMain.ToList();
            var CodeDetail = DbContext.TBDM_CodeDetail.ToList();

            var treeList = new List<TbdmCodeViewModel>();

            foreach (var itemProv in CodeMain.Where(p => p.C_Status == "1"))
            {
                TbdmCodeViewModel provModel = new TbdmCodeViewModel()
                {
                    C_Code = itemProv.C_Code,
                    C_Name = itemProv.C_Name,
                    I_Sort = itemProv.I_Sort,
                    C_Remark = itemProv.C_Remark,
                    C_Status = itemProv.C_Status
                };
                provModel.Children = new List<TbdmDetailCode>();
                foreach (var itemCity in CodeDetail.Where(c => c.C_Status == "1" && c.C_MainCode == itemProv.C_Code))
                {
                    TbdmDetailCode cityModel
                     = new TbdmDetailCode()
                     {
                         C_Code = itemCity.C_Code,
                         C_MainCode = itemProv.C_Code,
                         C_Name = itemCity.C_Name,
                         I_Sort = itemCity.I_Sort,
                         C_IsSys = itemCity.C_IsSys,
                         C_Default = itemCity.C_Default,
                         C_Remark = itemCity.C_Remark,
                         C_Status = itemCity.C_Status
                     };
                    provModel.Children.Add(cityModel);
                }
                treeList.Add(provModel);
            }

            return await Task.Run(() => treeList);
        }
        public Task<bool> DeleteByCodeAsync( string code)
        {
            MySqlConnector.MySqlParameter[] parameters = new[] { 
            new MySqlConnector.MySqlParameter("code", code)
            };
            string sql = @"UPDATE TBDM_CodeMain SET C_Status= '0' WHERE (C_Code =  @code);
UPDATE TBDM_CodeDetail SET C_Status= '0' WHERE (C_MainCode = @code);";
            int iResult = EntityFrameworkCoreExtensions.ExecuteSqlNoQuery(DbContext.Database, sql, parameters);
            if (iResult > 0)
                return Task.FromResult(true);
            else
                return Task.FromResult(false);
        }
    }
}