using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Documents;
using System.Windows.Shapes;

namespace EncryptFileTool.Entity
{
    /// <summary>
    /// 定级配置导入数据
    /// </summary>
    public class JsonEntity
    {
        public string SHAPE_ID { get; set; }
        public string SHAPE_NAME { get; set; }

        public string SHAPE_EN_NAME { get; set; }
        public string RULE_ID { get; set; } 
        public string RULE_NAME { get; set; }

        public string RULE_EN_NAME { get; set; }

        public List<GradeInfo> gradeInfos { get; set; } = new List<GradeInfo>();
        public List<StandardInfo> standardInfos { get; set; } = new List<StandardInfo>();
        public List<GradeConfigInfo> GradeConfigs { get; set; } = new List<GradeConfigInfo>();
        public List<GradeConfigDetail> GradeConfigDetails { get; set; } = new List<GradeConfigDetail>();
        public List<GradeConfigParameter> GradeConfigParameters { get; set; } = new List<GradeConfigParameter>();
    }
    public class GradeInfo
    {
        public string SHAPE_ID { get; set; }
        public string RULE_ID { get; set; }
        public string GRADE_ID { get; set; }
        public string GRADE_NAME { get; set; }
        public string GRADE_EN_NAME { get; set; }
        public string GRADE_EN_S_NAME { get; set; }
        public int GRADE_ORDER { get; set; }

        public string getInsertSql()
        {
            string insertSql = "INSERT INTO GRADE(";
            insertSql = insertSql +
                "SHAPE_ID" +
                ",RULE_ID" +
                ",GRADE_ID" +
                ",GRADE_NAME" +
                ",GRADE_EN_NAME" +
                ",GRADE_EN_S_NAME" +
                ",GRADE_ORDER" +
                ",GUID";
            insertSql = insertSql + ")VALUES(";
            insertSql = insertSql +
                $"'{SHAPE_ID}'" +
                $",'{RULE_ID}'" +
                $",'{GRADE_ID}'" +
                $",'{GRADE_NAME}'" +
                $",'{GRADE_EN_NAME}'" +
                $",'{GRADE_EN_S_NAME}'" +
                $",'{GRADE_ORDER}'" +
                $",'{Guid.NewGuid().ToString()}'";

            insertSql = insertSql + ");";
            return insertSql;
        }
        public string getDeleteSql()
        {
            string deleteSql = $"DELETE FROM GRADE WHERE SHAPE_ID='{SHAPE_ID}' AND RULE_ID='{RULE_ID}';";
            return deleteSql;
        }
    }
    public class StandardInfo
    {
        public string RULE_ID { get; set; } = "";
        public string GRADE_ID { get; set; }
        public string GRADE_ORDER { get { return GRADE_ID.Substring(GRADE_ID.Length - 1); } set { } }
        public string TEST_ITEM_ID { get; set; }
        public string STANDARD_ID { get; set; }
        public string STANDARD_NAME { get; set; }
        public string STANDARD_MIN { get; set; }
        public string STANDARD_MAX { get; set; }
        public string IS_MIN_EXIST { get; set; } = "0";
        public string IS_MAX_EXIST { get; set; } = "0";
        public string UNIT { get; set; }
        public string MIN_PREFIX { get; set; }
        public string MIN_SUFFIX { get; set; }
        public string MAX_PREFIX { get; set; }
        public string MAX_SUFFIX { get; set; }
        public string MIN_NULL_REPALCE { get; set; } = "←";
        public string MAX_NULL_REPALCE { get; set; } = "→";
        public int SORT { get; set; }
    }
    public class GradeConfigInfo
    {
        public string GRADE_CONFIG_ID { get; set; }
        public string SHAPE_ID { get; set; }
        public string RULE_ID { get; set; }
        public string TEST_ITEM_ID { get; set; }
        public int GRADE_CONFIG_ORDER { get; set; }
        public string getInsertSql()
        {
            string insertSql = "INSERT INTO GRADE_CONFIG(";
            insertSql = insertSql +
                "GRADE_CONFIG_ID" +
                ",SHAPE_ID" +
                ",RULE_ID" +
                ",TEST_ITEM_ID" +
                ",GRADE_CONFIG_ORDER" +
                ",GUID";
            insertSql = insertSql + ")VALUES(";
            insertSql = insertSql +
                $"'{GRADE_CONFIG_ID}'" +
                $",'{SHAPE_ID}'" +
                $",'{RULE_ID}'" +
                $",'{TEST_ITEM_ID}'" +
                $",'{GRADE_CONFIG_ORDER}'" +
                $",'{Guid.NewGuid().ToString()}'";

            insertSql = insertSql + ");";
            return insertSql;
        }
        public string getDeleteSql()
        {
            string deleteSql = $"DELETE FROM GRADE_CONFIG WHERE SHAPE_ID='{SHAPE_ID}' AND RULE_ID='{RULE_ID}';";
            return deleteSql;
        }
    }
    public class GradeConfigDetail
    {
        public string GRADE_CONFIG_ID { get; set; }
        public int GRADE_CONFIG_DETAIL_ID { get; set; }
        public string GRADE_ID { get; set; }
        public string getInsertSql()
        {
            string insertSql = "INSERT INTO GRADE_CONFIG_DETAIL(";
            insertSql = insertSql +
                "GRADE_CONFIG_ID" +
                ",GRADE_CONFIG_DETAIL_ID" +
                ",GRADE_ID" +
                ",GUID";
            insertSql = insertSql + ")VALUES(";
            insertSql = insertSql +
                $"'{GRADE_CONFIG_ID}'" +
                $",'{GRADE_CONFIG_DETAIL_ID}'" +
                $",'{GRADE_ID}'" +
                $",'{Guid.NewGuid().ToString()}'";

            insertSql = insertSql + ");";
            return insertSql;
        }
        public string getDeleteSql(string shapeId,string ruleId)
        {
            string deleteSql = $"DELETE FROM GRADE_CONFIG_DETAIL WHERE GRADE_CONFIG_ID LIKE '{shapeId+ruleId}%';";
            return deleteSql;
        }

    }
    public class GradeConfigParameter
    {
        public string GRADE_CONFIG_ID { get; set; }
        public int GRADE_CONFIG_DETAIL_ID { get; set; }
        public string PARAMETER_KEY { get; set; }
        public string PARAMETER_VALUE { get; set; }
        public string PARAMETER_TYPE { get; set; }
        public string getInsertSql()
        {
            string insertSql = "INSERT INTO GRADE_CONFIG_DETAIL_PARAMETER(";
            insertSql = insertSql +
                "GRADE_CONFIG_ID" +
                ",GRADE_CONFIG_DETAIL_ID" +
                ",PARAMETER_KEY" +
                ",PARAMETER_VALUE" +
                ",PARAMETER_TYPE" +
                ",GUID";
            insertSql = insertSql + ")VALUES(";
            insertSql = insertSql +
                $"'{GRADE_CONFIG_ID}'" +
                $",'{GRADE_CONFIG_DETAIL_ID}'" +
                $",'{PARAMETER_KEY}'" +
                $",'{PARAMETER_VALUE}'" +
                $",'{PARAMETER_TYPE}'" +
                $",'{Guid.NewGuid().ToString()}'";

            insertSql = insertSql + ");";
            return insertSql;
        }
        public string getDeleteSql(string shapeId, string ruleId)
        {
            string deleteSql = $"DELETE FROM GRADE_CONFIG_DETAIL_PARAMETER WHERE GRADE_CONFIG_ID LIKE '{shapeId + ruleId}%';";
            return deleteSql;
        }
    }
}