
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Text;
using System.Text.Json.Serialization;
using TEAMModelOS.SDK.Context.Attributes.Azure;
using TEAMModelOS.SDK.DI;

namespace TEAMModelOS.SDK.Models
{    
    public class SchoolProduct : CosmosEntity
    {        
        public SchoolProduct()
        {
            pk = "Base";
        }
        public List<SerialInfoBaseWithdeviceBound> serial { get; set; }
        public ProductService service { get; set; }
        public List<ProductHard> hard { get; set; }
        public Aclassone aclassone { get; set; }

    }

    public class Aclassone
    {
        public List<string> ids { get; set; } //固定分配的學生ID
        public List<string> outids { get; set; } //過期被回收的學生ID(無法使用，待數量購足後回復移至ids)
        public int total { get; set; }
        public int used { get; set; }
    }

    public class SerialInfoBase
    {
        public string id { get; set; }
        public string serial { get; set; }
        public string prodCode { get; set; }
        public int clientQty { get; set; }
        public long regDate { get; set; }
        public long startDate { get; set; }
        public long endDate { get; set; }
        public int deviceMax { get; set; }
        public object aprule { get; set; }
        public string expireStatus { get; set; }
        public int status { get; set; }
    }

    public class SerialInfoBaseWithdeviceBound : SerialInfoBase
    {
        public List<deviceBound> deviceBound { get; set; }
    }
    public class SerialInfoBaseWithdeviceBoundExt : SerialInfoBase
    {
        public List<deviceBoundExt> deviceBound { get; set; }
    }


    public class deviceBound
    {
        public string uuid { get; set; }
        public string uuid2 { get; set; }
        public string deviceId { get; set; }
        public string classId { get; set; }
    }
    public class deviceBoundRich : deviceBound
    {
        public string serial { get; set; }
    }
    public class deviceForCoreService
    {
        public string uuid1 { get; set; }
        public string uuid2 { get; set; }
        public string device_id { get; set; }
        public string class_id { get; set; }
        public string sn { get; set; }
    }
    public class deviceFromCoreService
    {
        public string uuid1 { get; set; }
        public string uuid2 { get; set; }
        public string device_id { get; set; }
        public string sn { get; set; }
        public string os { get; set; }
        public string os_ver { get; set; }
        public string local_ip { get; set; }
        public string product_ver { get; set; }
        public string cpu { get; set; }
        public string pc_name { get; set; }
    }
    public class deviceBoundExt : deviceBound
    {
        public string ip { get; set; }
        public string pcname { get; set; }
        public string os { get; set; }
        public string cpu { get; set; }
        public string osver { get; set; }
    }

    public class ProductService
    {
        public List<ServiceMainPeriod> mainperiod { get; set; }
        public List<ServicePeriod> period { get; set; }
        public List<ServiceProduct> product { get; set; }
    }
    public class ServiceMainPeriod
    {
        public string mainPeriodId { get; set; }
        public string mainPeriodtype { get; set; }
        public long startDate { get; set; }
        public long endDate { get; set; }
        public bool active { get; set; }
    }
    public class ServicePeriod
    {
        public string mainPeriodId { get; set; }
        public string periodId { get; set; }
        public long startDate { get; set; }
        public long endDate { get; set; }
        public bool active { get; set; }
    }

    public class ServiceProduct
    {
        public string prodCode { get; set; }
        public bool noperiod { get; set; }
        public string serviceType { get; set; }
        public List<ServiceProductAuth> auth { get; set; }
        public int avaliable { get; set; }
    }
    public class ServiceProductResult
    {
        public string prodCode { get; set; }
        public bool noperiod { get; set; }
        public string serviceType { get; set; }
        public long startDate { get; set; }
        public long endDate { get; set; }
        public int avaliable { get; set; }
    }
    public class ServiceProductAclassoneResult : ServiceProductResult
    {
        public int staUsed { get; set; }
        public int dynUsed { get; set; }
    }
    public class ServiceProductAuth
    {
        public string orderId { get; set; }
        public string periodId { get; set; }
        public int number { get; set; }
        public string unit { get; set; }
    }

    public class ServiceProductAuthHistoryBasic
    {
        public string orderId { get; set; }
        public long orderDate { get; set; }
        public int number { get; set; }
        public string unit { get; set; }
    }
    public class ServiceProductAuthHistory : ServiceProductAuthHistoryBasic
    {
        public List<string> periodIdList { get; set; }
    }
    public class ServiceProductAuthHistoryStartEnd : ServiceProductAuthHistoryBasic
    {
        public long startDate { get; set; }
        public long endDate { get; set; }
    }

    public class ProductHard
    {
        public string prodCode { get; set; }
        public string model { get; set; }
        public string serial { get; set; }
    }

    public class CoreUuid
    {
        public string serial { get; set; }
        public string os { get; set; }
        public string ip { get; set; }
        public string uuid { get; set; }
        public string uuid2 { get; set; }
        public string deviceId { get; set; }
        public string pcname { get; set; }
        public string cpu { get; set; }
        public int ram { get; set; }
    }

    public class periodZone
    {
        public long startDate { get; set; }
        public long endDate { get; set; }
    }
}
