using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace IRaCIS.Core.Application.Contracts
{

    public class UnionStudyBaseModel
    {
        public Guid TrialId { get; set; }

        public Guid SiteId { get; set; }

        public Guid SubjectId { get; set; }

        public Guid SubjectVisitId { get; set; }


        public string SubjectCode { get; set; } = String.Empty;

        public string VisitName { get; set; } = string.Empty;

        public decimal VisitNum { get; set; }

        public string TrialSiteCode { get; set; } = string.Empty;

        public string TrialSiteAliasName { get; set; } = string.Empty;

        public string Uploader { get; set; } = string.Empty;

        public DateTime UploadTime { get; set; }

        public string StudyCode  { get; set; }


        //[JsonIgnore]
        //public string DicomStudyCode { get; set; } = string.Empty;
        //[JsonIgnore]
        //public int NoneDicomCode { get; set; }

        public bool IsDicom { get; set; }
    }

    public class UnionStudyMonitorModel : UnionStudyBaseModel
    {
        public Guid StudyId { get; set; }





        public string UploadStartTimeStr => UploadStartTime.ToString("yyyy-MM-dd HH:mm:ss.fff");
        public string UploadFinishedTimeStr => UploadFinishedTime?.ToString("yyyy-MM-dd HH:mm:ss.fff");

        public string ArchiveFinishedTimeStr => ArchiveFinishedTime?.ToString("yyyy-MM-dd HH:mm:ss.fff");


        public string UploadIntervalStr
        {
            get
            {
                var uploadTimeSpan = UploadFinishedTime - UploadStartTime;

                return $" {uploadTimeSpan?.Hours}:{uploadTimeSpan?.Minutes}:{uploadTimeSpan?.Seconds}.{uploadTimeSpan?.Milliseconds}";
            }
        }

        public string ArchiveIntervalStr 
        {
            get
            {
                var uploadTimeSpan = ArchiveFinishedTime - UploadFinishedTime;

                return $" {uploadTimeSpan?.Hours}:{uploadTimeSpan?.Minutes}:{uploadTimeSpan?.Seconds}.{uploadTimeSpan?.Milliseconds}";
            }
        }



        public string TimeInterval
        {
            get
            {

                var uploadTimeSpan = ArchiveFinishedTime - UploadStartTime;

                return $" {uploadTimeSpan?.Hours}:{uploadTimeSpan?.Minutes}:{uploadTimeSpan?.Seconds}.{uploadTimeSpan?.Milliseconds}";

                #region 废弃
                //if (uploadTimeSpan.Seconds == 0 && uploadTimeSpan.Minutes==0 && uploadTimeSpan.Hours == 0)
                //{
                //    return $"{uploadTimeSpan.Milliseconds}毫秒";
                //}
                //else if (uploadTimeSpan.Minutes == 0 && uploadTimeSpan.Hours == 0)
                //{
                //    return $"{uploadTimeSpan.Seconds}秒";
                //}
                //else if (uploadTimeSpan.Hours == 0)
                //{
                //    return $"{uploadTimeSpan.Minutes} 分钟 {uploadTimeSpan.Seconds} 秒";
                //}
                //else
                //{
                //    return $" {uploadTimeSpan.Hours} 小时 {uploadTimeSpan.Minutes} 分钟 {uploadTimeSpan.Seconds} 秒 {uploadTimeSpan.Milliseconds}毫秒";
                //}
                #endregion

            }
        }

        public DateTime UploadStartTime { get; set; }


        public DateTime? UploadFinishedTime { get; set; }

        public DateTime? ArchiveFinishedTime { get; set; }


        public decimal FileSize { get; set; }

        public string IP { get; set; } = String.Empty;


        public bool IsDicomReUpload { get; set; }


        public int FileCount { get; set; }

        public bool IsSuccess { get; set; }

        public string Note = string.Empty;

    }


    public class UnionStudyViewModel:UnionStudyBaseModel
    {
        
        public Guid Id { get; set; }

        

        public int? Count { get; set; }


        public string Modalities { get; set; } = string.Empty;

        public string Bodypart { get; set; } = string.Empty;

        public DateTime? StudyTime { get; set; }

       
    }



    public class StudyQuery:PageInput
    {
        [NotDefault]
        public Guid TrialId { get; set; }

        public Guid? SubjectId { get; set; }

        public Guid? SiteId { get; set; }
        public Guid? SubjectVisitId { get; set; }

        public string SubjectInfo { get; set; } = String.Empty;


        public string[]? VisitPlanArray { get; set; }

    }
}
