using IRaCIS.Core.Domain.Models;
using IRaCIS.Core.Domain.Share;
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace IRaCIS.Core.Test.CodeFirstTest.MSSQL
{

    [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



}