using System;
using System.Collections.Generic;
using System.Data;
using System.Data.Common;

using CB.Common;
using CB.Entity;
using CB.Interface.Infrastructure;

namespace CB.Data.SqlServer
{
    public class TCDLTTrendChartDataManage : Repository<TrendChartData>, ITCDLTTrendChartDataService
    {
        public TCDLTTrendChartDataManage(string interfaceId)
            : base(interfaceId)
        {
        }
        public override bool Save(TrendChartData entity)
        {
            DbParameter[] pars ={
                DbHelper.MakeInParam(InterfaceId,"@ChartId",(DbType)SqlDbType.Int,4,entity.ChartId),
                DbHelper.MakeInParam(InterfaceId,"@Term",(DbType)SqlDbType.Int,4,entity.Term),
                DbHelper.MakeInParam(InterfaceId,"@RecordCount",(DbType)SqlDbType.Int,0,entity.RecordCount),
                DbHelper.MakeInParam(InterfaceId,"@AllMaxMiss",(DbType)SqlDbType.NVarChar,0,entity.AllMaxMiss.ArrayToString()),
                DbHelper.MakeInParam(InterfaceId,"@AllTimes",(DbType)SqlDbType.NVarChar,0,entity.AllTimes.ArrayToString()),
                DbHelper.MakeInParam(InterfaceId,"@AllAvgMiss",(DbType)SqlDbType.NVarChar,0,entity.AllAvgMiss.ArrayToString()),
                DbHelper.MakeInParam(InterfaceId,"@LastMiss",(DbType)SqlDbType.NVarChar,0,entity.LastMiss.ArrayToString()),
                DbHelper.MakeInParam(InterfaceId,"@LocalMiss",(DbType)SqlDbType.NVarChar,0,entity.LocalMiss.ArrayToString()),
                DbHelper.MakeInParam(InterfaceId,"@HtmlData",(DbType)SqlDbType.NVarChar,0,entity.HtmlData),
                DbHelper.MakeInParam(InterfaceId,"@ChartType",(DbType)SqlDbType.Int,4,entity.ChartType)
                                };
            return TypeConverter.ObjectToInt(DbHelper.ExecuteScalar(InterfaceId,CommandType.StoredProcedure, "usp_TCDLTTrendChartData_save", pars)) > 0;
        }

        public override bool Update(TrendChartData entity)
        {
            throw new NotImplementedException();
        }

        public override bool Delete(int Id)
        {
            throw new NotImplementedException();
        }

        public override TrendChartData Get<TKey>(TKey key)
        {
            throw new NotImplementedException();
        }

        public override IList<TrendChartData> ToList()
        {
            throw new NotImplementedException();
        }

        public override IList<TrendChartData> ToList(TrendChartData entity)
        {
            throw new NotImplementedException();
        }

        public override IList<TrendChartData> ToPaging(TrendChartData entity, int pageSize, int pageIndex, out int recordCount)
        {
            throw new NotImplementedException();
        }

        public IList<TrendChartData> ToList(TrendChartSearchField entity)
        {
            IList<TrendChartData> list = new List<TrendChartData>();
            DbParameter[] pars ={
                DbHelper.MakeInParam(InterfaceId,"@ChartId",(DbType)SqlDbType.Int,4,entity.ChartId),
                DbHelper.MakeInParam(InterfaceId,"@ChartType",(DbType)SqlDbType.Int,4,entity.ChartType),
                DbHelper.MakeInParam(InterfaceId,"@Record",(DbType)SqlDbType.Int,4,entity.Record),
                DbHelper.MakeInParam(InterfaceId,"@startQi",(DbType)SqlDbType.Int,4,entity.StartTerm),
                DbHelper.MakeInParam(InterfaceId,"@endQi",(DbType)SqlDbType.Int,4,entity.EndTerm),
                DbHelper.MakeInParam(InterfaceId,"@Year",(DbType)SqlDbType.Int,4,entity.Year),
                                };
            using (DataTable dt = DbHelper.ExecuteDatatable(InterfaceId,CommandType.StoredProcedure, "usp_TCDLTTrendChartData_list_select", pars))
            {
                if (null != dt && 0 < dt.Rows.Count)
                {
                    foreach (DataRow dr in dt.Rows)
                    {
                        list.Add(LoadEntity(dr));
                    }
                }
                dt.Dispose();
            }
            return list;
        }

        public TrendChartData GetTrendChartDataByTerm(int chartId, TrendChartType chartType, long term)
        {
            TrendChartData entity = null;
            DbParameter[] para = 
            {
                DbHelper.MakeInParam(InterfaceId,"@statement",(DbType)SqlDbType.NVarChar,500,"SELECT TOP 1 [Id] ,[ChartId] ,[Term],[RecordCount],[AllMaxMiss] ,[AllTimes],[AllAvgMiss] ,[LastMiss] ,[LocalMiss],[HtmlData],[ChartType],[Addtime] FROM [dbo].[DT_TCDLTTrendChartData] WHERE [ChartId]=@cid AND [Term]=@qi AND [ChartType]=@chartType ORDER BY [Term] ASC"),
                DbHelper.MakeInParam(InterfaceId,"@params",(DbType)SqlDbType.NVarChar,50,"@cid int,@qi int,@chartType int"),
                DbHelper.MakeInParam(InterfaceId,"@cid",(DbType)SqlDbType.Int,4,chartId),
                DbHelper.MakeInParam(InterfaceId,"@qi",(DbType)SqlDbType.Int,4,term),
                DbHelper.MakeInParam(InterfaceId,"@chartType",(DbType)SqlDbType.Int,4,chartType)
            };
            using (IDataReader reader = DbHelper.ExecuteReader(InterfaceId,CommandType.StoredProcedure, "dbo.[sp_executesql]", para))
            {
                while (reader.Read())
                {
                    entity = LoadEntity(reader);
                }
                reader.Close();
            }
            return entity;
        }

        protected override TrendChartData LoadEntity(IDataReader reader)
        {
            return new TrendChartData
            {
                Id = TypeConverter.ObjectToInt(reader["Id"]),
                ChartId = TypeConverter.ObjectToInt(reader["ChartId"]),
                Term = TypeConverter.ObjectToInt(reader["Term"]),
                RecordCount = TypeConverter.ObjectToInt(reader["RecordCount"]),
                AllMaxMiss = reader["AllMaxMiss"].ToString().Split('|'),
                AllTimes = reader["AllTimes"].ToString().Split('|'),
                AllAvgMiss = reader["AllAvgMiss"].ToString().Split('|'),
                LastMiss = reader["LastMiss"].ToString().Split('|'),
                LocalMiss = reader["LocalMiss"].ToString().Split('|'),
                HtmlData = reader["HtmlData"].ToString().Trim(),
                ChartType = (TrendChartType)Enum.Parse(typeof(TrendChartType), reader["ChartType"].ToString()),
                Addtime = TypeConverter.ObjectToDateTime(reader["Addtime"], DateTime.MinValue)
            };
        }

        protected override TrendChartData LoadEntity(DataRow dr)
        {
            return new TrendChartData
            {
                Id = TypeConverter.ObjectToInt(dr["Id"]),
                ChartId = TypeConverter.ObjectToInt(dr["ChartId"]),
                Term = TypeConverter.ObjectToInt(dr["Term"]),
                RecordCount = TypeConverter.ObjectToInt(dr["RecordCount"]),
                AllMaxMiss = dr["AllMaxMiss"].ToString().Split('|'),
                AllTimes = dr["AllTimes"].ToString().Split('|'),
                AllAvgMiss = dr["AllAvgMiss"].ToString().Split('|'),
                LastMiss = dr["LastMiss"].ToString().Split('|'),
                LocalMiss = dr["LocalMiss"].ToString().Split('|'),
                HtmlData = dr["HtmlData"].ToString().Trim(),
                ChartType = (TrendChartType)Enum.Parse(typeof(TrendChartType), dr["ChartType"].ToString()),
                Addtime = TypeConverter.ObjectToDateTime(dr["Addtime"], DateTime.MinValue)
            };
        }
    }
}