using System;
using System.ComponentModel.DataAnnotations;

namespace ChangkeTec.SDMS.Model.Attributes
{
    /// <summary>
    ///     列来源属于
    /// </summary>
    [AttributeUsage(AttributeTargets.Field | AttributeTargets.Property)]
    public class ColumnSource : Attribute
    {
        /// <summary>
        /// </summary>
        /// <param name="sourceType">列来源。ENUM:枚举数据源.TABLE表数据源(外键关系)</param>
        /// <param name="typeName">来源数据源类型</param>
        /// <param name="columnNames">
        ///     sourceType为TABLE时,columName是对应表中的列名
        ///     columnNames[0]: ValueMember ,colums[1]:DisplayMember
        public ColumnSource(ColumnSourceType sourceType, Type typeName, string[] columnNames = null,
            string selector = null)
        {
            SourceType = sourceType;
            TypeName = typeName;
            ColumnNames = columnNames;
            Selector = selector;
        }


        public ColumnSourceType SourceType { get; }

        /// <summary>获取或设置属性映射到的列的从零开始的顺序。</summary>
        /// <returns>列的顺序。</returns>
        public Type TypeName { get; }

        /// <summary>获取或设置该属性映射到的列的数据库提供程序特定的数据类型。</summary>
        /// <returns>属性将映射到的列的数据库提供程序特定数据类型。</returns>
        [StringLength(50)]
        public string[] ColumnNames { get; }

        [StringLength(50)]
        public string Selector { get; set; }
    }

    public enum ColumnSourceType
    {
        /// <summary>
        ///     枚举数据源
        /// </summary>
        ENUM = 1,

        /// <summary>
        ///     表数据源
        /// </summary>
        TABLE = 2,

        /// <summary>
        ///     bool类型
        /// </summary>
        Boolean = 4
    }
}