using Aitex.Core.Common;
using Aitex.Core.RT.DBCore;
using DocumentFormat.OpenXml.EMMA;
using MECF.Framework.Common.Equipment;
using MECF.Framework.Common.SubstrateTrackings;
using MECF.Framework.Common.WaferHolder;
using CyberX8_Core;
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace MECF.Framework.Common.DBCore
{
    public class WaferHolderDataRecorder
    {
        /// <summary>
        /// 加载所有载具
        /// </summary>
        /// <returns></returns>
        public static List<WaferHolderInfo> GetAllWaferHolderDatas()
        {
            List<WaferHolderInfo> result = new List<WaferHolderInfo>();

            string sql = $"SELECT * FROM wafer_holder";

            DataSet ds = DB.ExecuteDataset(sql);
            if (ds == null)
                return result;
            if (ds.Tables.Count == 0)
                return result;

            for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
            {
                WaferHolderInfo data = new WaferHolderInfo();
                data.Id = ds.Tables[0].Rows[i]["id"].ToString();
                data.TotalUses = int.Parse(ds.Tables[0].Rows[i]["total_uses"].ToString());
                data.BufferId = int.Parse(ds.Tables[0].Rows[i]["buffer_id"].ToString());
                data.CrsType = ds.Tables[0].Rows[i]["crs_type"].ToString();
                data.Enabled = bool.Parse(ds.Tables[0].Rows[i]["enabled"].ToString());
                data.WaferSize = int.Parse(ds.Tables[0].Rows[i]["wafer_size"].ToString());
                data.Chemistry = ds.Tables[0].Rows[i]["chemistry"].ToString();
                data.CrsAId = ds.Tables[0].Rows[i]["crsa_id"].ToString();
                data.CrsATotalUses = int.Parse(ds.Tables[0].Rows[i]["crsa_total_uses"].ToString());
                data.CrsAUsesSincePadClean =int.Parse(ds.Tables[0].Rows[i]["crsa_pad_uses"].ToString());
                data.CrsAUsesSinceSealClean =int.Parse(ds.Tables[0].Rows[i]["crsa_seal_uses"].ToString());
                data.CrsBId = ds.Tables[0].Rows[i]["crsb_id"].ToString();
                data.CrsBTotalUses = int.Parse(ds.Tables[0].Rows[i]["crsb_total_uses"].ToString());
                data.CrsBUsesSincePadClean = int.Parse(ds.Tables[0].Rows[i]["crsb_pad_uses"].ToString());
                data.CrsBUsesSinceSealClean = int.Parse(ds.Tables[0].Rows[i]["crsb_seal_uses"].ToString());
                data.TotalDummyWafers = int.Parse(ds.Tables[0].Rows[i]["total_dummy_wafers"].ToString());
                data.TotalProductWafers = int.Parse(ds.Tables[0].Rows[i]["total_product_wafers"].ToString());
                data.CurrentLocation = ds.Tables[0].Rows[i]["current_location"].ToString();
                data.Status = (WaferHolderStatus)int.Parse(ds.Tables[0].Rows[i]["status"].ToString());
                data.WaferAId = ds.Tables[0].Rows[i]["wafera_id"].ToString();
                data.WaferBId = ds.Tables[0].Rows[i]["waferb_id"].ToString();
                data.WaferAType = int.Parse(ds.Tables[0].Rows[i]["wafera_type"].ToString());
                data.WaferBType = int.Parse(ds.Tables[0].Rows[i]["waferb_type"].ToString());
                result.Add(data);
            }

            ds.Clear();

            return result;
        }
        /// <summary>
        /// 根据Location加载WaferHolder信息
        /// </summary>
        /// <returns></returns>
        public static WaferHolderInfo GetWaferHolderDataByLocation(string location)
        {
            WaferHolderInfo data = new WaferHolderInfo();

            string sql = $"SELECT * FROM wafer_holder WHERE current_location='{location}'";

            DataSet ds = DB.ExecuteDataset(sql);
            if (ds == null)
                return null;
            if (ds.Tables[0].Rows.Count == 0)
                return null;
            data.Id = ds.Tables[0].Rows[0]["id"].ToString();
            data.BufferId = int.Parse(ds.Tables[0].Rows[0]["buffer_id"].ToString());
            data.TotalUses = int.Parse(ds.Tables[0].Rows[0]["total_uses"].ToString());
            data.CrsType = ds.Tables[0].Rows[0]["crs_type"].ToString();
            data.Enabled = bool.Parse(ds.Tables[0].Rows[0]["enabled"].ToString());
            data.WaferSize = int.Parse(ds.Tables[0].Rows[0]["wafer_size"].ToString());
            data.Chemistry = ds.Tables[0].Rows[0]["chemistry"].ToString();
            data.CrsAId = ds.Tables[0].Rows[0]["crsa_id"].ToString();
            data.CrsATotalUses = int.Parse(ds.Tables[0].Rows[0]["crsa_total_uses"].ToString());
            data.CrsAUsesSincePadClean = int.Parse(ds.Tables[0].Rows[0]["crsa_pad_uses"].ToString());
            data.CrsAUsesSinceSealClean = int.Parse(ds.Tables[0].Rows[0]["crsa_seal_uses"].ToString());
            data.CrsBId = ds.Tables[0].Rows[0]["crsb_id"].ToString();
            data.CrsBTotalUses = int.Parse(ds.Tables[0].Rows[0]["crsb_total_uses"].ToString());
            data.CrsBUsesSincePadClean = int.Parse(ds.Tables[0].Rows[0]["crsb_pad_uses"].ToString());
            data.CrsBUsesSinceSealClean = int.Parse(ds.Tables[0].Rows[0]["crsb_seal_uses"].ToString());
            data.TotalDummyWafers = int.Parse(ds.Tables[0].Rows[0]["total_dummy_wafers"].ToString());
            data.TotalProductWafers = int.Parse(ds.Tables[0].Rows[0]["total_product_wafers"].ToString());
            data.CurrentLocation = ds.Tables[0].Rows[0]["current_location"].ToString();
            data.Status = (WaferHolderStatus)int.Parse(ds.Tables[0].Rows[0]["status"].ToString());
            data.WaferAId = ds.Tables[0].Rows[0]["wafera_id"].ToString();
            data.WaferBId = ds.Tables[0].Rows[0]["waferb_id"].ToString();
            data.WaferAType = int.Parse(ds.Tables[0].Rows[0]["wafera_type"].ToString());
            data.WaferBType = int.Parse(ds.Tables[0].Rows[0]["waferb_type"].ToString());          

            ds.Clear();

            return data;
        }
        /// <summary>
        /// 
        /// </summary>
        /// <param name="waferHodlerId"></param>
        /// <param name="enable"></param>
        public static int UpdateWaferHolderEnable(string waferHodlerId,bool enable)
        {
            string sql = string.Format("UPDATE wafer_holder SET enabled={0},Status={3},update_time='{2}' WHERE id='{1}';",
               enable,
               waferHodlerId,
               DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"),enable?(int)WaferHolderStatus.Normal:(int)WaferHolderStatus.Disabled);

            return DB.SyncUpdate(sql);
        }
        /// <summary>301
        /// 新增
        /// </summary>
        /// <param name="bufferId"></param>
        /// <param name="info"></param>
        /// <returns></returns>
        public static int AddWaferHolderData(int bufferId, WaferHolderInfo info)
        {
            string sql =string.Format(@"Insert into wafer_holder(id, buffer_id, crs_type, wafer_size, enabled, chemistry, crsa_id, crsa_total_uses, crsa_pad_uses, crsa_seal_uses,
                crsb_id, crsb_total_uses, crsb_pad_uses, crsb_seal_uses, total_dummy_wafers, total_product_wafers,current_location,status, create_time, update_time,wafera_id,waferb_id,
                wafera_type,waferb_type,total_uses)
                Values('{0}',{1},'{2}',{3},{4},'{5}','{6}',{7},{8},{9},
                        '{10}',{11},{12},{13},{14},{15},'{16}',{17},'{18}','{19}','{20}','{21}',{22},{23},{24});",
                        info.Id,bufferId,info.CrsType,info.WaferSize,info.Enabled,info.Chemistry,info.CrsAId,info.CrsATotalUses,info.CrsAUsesSincePadClean,
                        info.CrsAUsesSinceSealClean,info.CrsBId,info.CrsBTotalUses,info.CrsBUsesSincePadClean,info.CrsBUsesSinceSealClean,info.TotalDummyWafers,info.TotalProductWafers,
                        info.CurrentLocation, (int)info.Status,DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"), DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"),info.WaferAId,info.WaferBId,
                        info.WaferAType,info.WaferBType,info.TotalUses);
            return DB.SyncInsert(sql);
        }
        /// <summary>
        /// 更新
        /// </summary>
        /// <param name="waferHolderId"></param>
        /// <param name="info"></param>
        /// <returns></returns>
        public static void UpdateWaferHolderData(string waferHolderId, WaferHolderInfo info)
        {
            string sql = string.Format(@"update wafer_holder set crs_type='{0}', wafer_size={1},chemistry='{2}', crsa_id='{3}', crsa_total_uses={4}, crsa_pad_uses={5},
                                        crsa_seal_uses={6},crsb_id='{7}', crsb_total_uses={8}, crsb_pad_uses={9}, crsb_seal_uses={10}, total_dummy_wafers={11},
                                        total_product_wafers={12}, update_time='{13}',current_location='{14}',buffer_id={15},
                                        wafera_id='{16}',waferb_id='{17}',wafera_type={18},waferb_type={19},id='{21}',total_uses={22} where id='{20}';",
                        info.CrsType, info.WaferSize,info.Chemistry, info.CrsAId, info.CrsATotalUses, info.CrsAUsesSincePadClean,
                        info.CrsAUsesSinceSealClean, info.CrsBId, info.CrsBTotalUses, info.CrsBUsesSincePadClean, info.CrsBUsesSinceSealClean, info.TotalDummyWafers, 
                        info.TotalProductWafers,DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"),info.CurrentLocation,info.BufferId,
                        info.WaferAId, info.WaferBId,info.WaferAType, info.WaferBType,waferHolderId,info.Id,info.TotalUses);
            DB.Update(sql);
        }

        /// <summary>
        /// 更新
        /// </summary>
        /// <param name="waferHolderId"></param>
        /// <param name="info"></param>
        /// <returns></returns>
        public static int SyncUpdateWaferHolderData(string waferHolderId, WaferHolderInfo info)
        {
            string sql = string.Format(@"update wafer_holder set id='{0}',crs_type='{1}', wafer_size={2},chemistry='{3}', crsa_id='{4}', crsa_total_uses={5}, crsa_pad_uses={6},
                                        crsa_seal_uses={7},crsb_id='{8}', crsb_total_uses={9}, crsb_pad_uses={10}, crsb_seal_uses={11}, total_dummy_wafers={12},
                                        total_product_wafers={13}, update_time='{14}',current_location='{15}',buffer_id={16},
                                        wafera_id='{17}',waferb_id='{18}',wafera_type={19},waferb_type={20},total_uses={22} where id='{21}';",
                        info.Id, info.CrsType, info.WaferSize, info.Chemistry, info.CrsAId, info.CrsATotalUses, info.CrsAUsesSincePadClean,
                        info.CrsAUsesSinceSealClean, info.CrsBId, info.CrsBTotalUses, info.CrsBUsesSincePadClean, info.CrsBUsesSinceSealClean, info.TotalDummyWafers,
                        info.TotalProductWafers, DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"), info.CurrentLocation, info.BufferId,
                        info.WaferAId, info.WaferBId, info.WaferAType, info.WaferBType, waferHolderId,info.TotalUses);
            return DB.SyncUpdate(sql);
        }

        /// <summary>
        /// 删除
        /// </summary>
        /// <param name="waferHolderId"></param>
        /// <returns></returns>
        public static int DeleteWaferHolderData(string waferHolderId)
        {
            string sql = string.Format(@"delete from wafer_holder where id='{0}'", waferHolderId);
            return DB.SyncUpdate(sql);
        }
    }
}