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;
using MECF.Framework.Common.ProcessCell;

namespace MECF.Framework.Common.DBCore
{
    public class MetalUsageRecorder
    {
        /// <summary>
        /// 加载Metal使用量集合
        /// </summary>
        /// <returns></returns>
        public static List<MetalUsage> GetAllMetalUsages()
        {
            List<MetalUsage> result = new List<MetalUsage>();

            string sql = $"SELECT * FROM metal_usage";

            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++)
            {
                MetalUsage data = new MetalUsage();
                data.MetalName = ds.Tables[0].Rows[i]["metal_name"].ToString();
                data.TotalUsage = double.Parse(ds.Tables[0].Rows[i]["total_usage"].ToString());
                data.AnodeAUsage = double.Parse(ds.Tables[0].Rows[i]["anode_a_usage"].ToString());
                data.AnodeBUsage= double.Parse(ds.Tables[0].Rows[i]["anode_b_usage"].ToString());
                data.MembranceAUsage= double.Parse(ds.Tables[0].Rows[i]["membrance_a_usage"].ToString());
                data.MembranceBUsage= double.Parse(ds.Tables[0].Rows[i]["membrance_b_usage"].ToString());
                data.TotalWafers = int.Parse(ds.Tables[0].Rows[i]["total_wafers"].ToString());
                data.AnodeAWafers = int.Parse(ds.Tables[0].Rows[i]["anode_a_wafers"].ToString());
                data.AnodeBWafers = int.Parse(ds.Tables[0].Rows[i]["anode_b_wafers"].ToString());
                result.Add(data);
            }

            ds.Clear();

            return result;
        }
        /// <summary>
        /// 新增
        /// </summary>
        /// <param name="metalName"></param>
        /// <param name="info"></param>
        /// <returns></returns>
        public static int AddMetalUsage(MetalUsage info)
        {
            string sql =string.Format(@"Insert into metal_usage(metal_name, total_usage,anode_a_usage,anode_b_usage,membrance_a_usage,
                                 membrance_b_usage,total_wafers,anode_a_wafers,anode_b_wafers,create_time, update_time)
                Values('{0}',{1},{2},{3},{4},{5},{6},{7},{8},'{9}','{10}');",
                        info.MetalName,info.TotalUsage,info.AnodeAUsage,info.AnodeBUsage,info.MembranceAUsage,info.MembranceBUsage,
                        info.TotalWafers,info.AnodeAWafers,info.AnodeBWafers, DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"), DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"));
            return DB.SyncInsert(sql);
        }
        /// <summary>
        /// 更新
        /// </summary>
        /// <param name="waferHolderId"></param>
        /// <param name="info"></param>
        /// <returns></returns>
        public static void UpdateMetalUsageData(string metalName, MetalUsage info)
        {
            string sql = string.Format(@"update metal_usage set total_usage={0},anode_a_usage={1},anode_b_usage={2},
                            membrance_a_usage={3},membrance_b_usage={4},total_wafers={5},anode_a_wafers={6},
                            anode_b_wafers={7},update_time='{8}' where metal_name='{9}';",
                        info.TotalUsage, info.AnodeAUsage, info.AnodeBUsage,info.MembranceAUsage, info.MembranceBUsage, 
                        info.TotalWafers, info.AnodeAWafers,info.AnodeBWafers,DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"),metalName);
            DB.Update(sql);
        }

        /// <summary>
        /// 更新
        /// </summary>
        /// <param name="metalName"></param>
        /// <param name="info"></param>
        /// <returns></returns>
        public static int SyncUpdateMetalUsageData(string metalName, MetalUsage info)
        {
            string sql = string.Format(@"update metal_usage set total_usage={0},anode_a_usage={1},anode_b_usage={2},
                            membrance_a_usage={3},membrance_b_usage={4},total_wafers={5},anode_a_wafers={6},
                            anode_b_wafers={7},update_time='{8}' where metal_name='{9}';",
                        info.TotalUsage, info.AnodeAUsage, info.AnodeBWafers, info.MembranceAUsage, info.MembranceBUsage,
                        info.TotalWafers, info.AnodeAWafers, info.AnodeBWafers, DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"), metalName);
            return DB.SyncUpdate(sql);
        }
    }
}