using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;

namespace IRaCIS.Core.Test.CodeFirstTest.MSSQL
{
    public abstract class BaseFullAuditEntity
    {
        [Key]
        public Guid Id { get; set; }
        public Guid CreateUserId { get; set; }
        public DateTime CreateTime { get; set; }
        public Guid UpdateUserId { get; set; }
        public DateTime UpdateTime { get; set; }
    }

    [Table("TrialImageDownload")]
    public class TrialImageDownload : BaseFullAuditEntity
    {
        public Guid SubjectVisitId { get; set; }

        public bool IsSuccess { get; set; }

        public DateTime DownloadStartTime { get; set; }
        public DateTime? DownloadEndTime { get; set; }

        public ImageType ImageType { get; set; }

        public int ImageCount { get; set; }

        public long ImageSize { get; set; }

        #region 测试导航属性

        public List<TestNew> TestNewList { get; set; }

        #endregion
    }

    public enum ImageType
    {
        Dicom = 1,
        NoneDIcom = 2
    };

    public class TestNew : BaseFullAuditEntity
    {
        public Guid TrialImageDownloadId { get; set; }

        [StringLength(100)]
        public string TestName { get; set; }
    }


    //public class Subject : BaseFullAuditEntity
    //{
    //    public string Name { get; set; }


    //    public Guid? LatestSubjectVisitId { get; set; }

    //    public Guid? FinalSubjectVisitId { get; set; }

    //    #region 同时配置一对多,一对一  导航属性

    //    [ForeignKey("FinalSubjectVisitId")]
    //    public SubejectVisit FinalSubjectVisit { get; set; }

    //    [ForeignKey("LatestSubjectVisitId")]
    //    public SubejectVisit LatestSubjectVisit { get; set; }

    //    public List<SubejectVisit> SubejectVisitList { get; set; }
    //    #endregion

    //}

    //public class SubejectVisit : BaseFullAuditEntity
    //{
    //    public Subject Subject { get; set; }

    //    public Guid SubjectId { get; set; }

    //}


    //public class Dictionary : BaseFullAuditEntity
    //{
    //    #region 导航属性
    //    [ForeignKey("ConfigTypeId")]
    //    public Dictionary ConfigType { get; set; }

    //    [ForeignKey("ParentId")]
    //    public Dictionary Parent { get; set; }

    //    public List<Dictionary> ChildList { get; set; } = new List<Dictionary>();

    //    #endregion


    //    public Guid? ParentId { get; set; }


    //    public Guid? ConfigTypeId { get; set; }

    //    public string Code { get; set; }
    //}

    #region 一个外键 关联两个实体
    //public class ReadingClinicalData : BaseFullAuditEntity
    //{
    //    public string Code { get; set; }


    //    public Guid ReadingId { get; set; }


    //    [ForeignKey("ReadingId")]

    //    public SubejectVisit SubjectVisit { get; set; }

    //    [ForeignKey("ReadingId")]

    //    public ReadModule ReadModule { get; set; }
    //}

    //public class ReadModule : BaseFullAuditEntity
    //{
    //    public string Name { get; set; }
    //}
    #endregion

    #region 测试 字符串默认长度配置

    public class TestStringLength : BaseFullAuditEntity
    {
        public string DefaultLength { get; set; }

        [MaxLength(300)]
        public string UserDefineLength { get; set; }

        [Column(TypeName = "text")]
        public string UserDefineText { get; set; }

    }
    #endregion

    #region 测试生成迁移移除外键约束

    #endregion

    #region 测试迁移不生成外键约束,ef知道外键关系,但是数据库不保存外键
    public class Project : BaseFullAuditEntity
    {

    }

    public class ProjectUser : BaseFullAuditEntity
    {
        public string Name2 { get; set; }

        public string OtherName { get; set; }

        public string Code { get; set; }



        //外键
        public Guid ProjectId { get; set; }

        public Project Project { get; set; }
    }

    public class ProjectUser2 : BaseFullAuditEntity
    {
        //外键
        public Guid ProjectId { get; set; }

        public Project Project { get; set; }
    }
    #endregion

    #region 测试字符串长度

    public class TestStr: BaseFullAuditEntity
    {
        public string DefualtLength { get; set; }

        [MaxLength]
        public string MaxLength { get; set; }

        [StringLength(400)]
        public string DefineLength { get; set;}
    }
    #endregion


}