using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using MessagePack;
using MongoDB.Bson;

namespace CommonEntity
{
    [MessagePackObject()]
    public class IOTMonitorData
    {
        [Key(0)]
        public double Step { get; set; }

        [Key(1)]
        public string? RequestId { get; set; }

        [Key(2)]
        public string? Platform { get; set; }


        [Key(3)]
        public string? TriggerTime { get; set; }


        [Key(4)]
        public string? HotelId { get; set; }


        [Key(5)]
        public int HotelCode { get; set; }


        [Key(6)]
        public string? HotelName { get; set; }


        [Key(7)]
        public string RoomNumber { get; set; }

        [Key(8)]

        public string CommandDescription { get; set; }


        [Key(9)]
        public DateTime CreateTime { get; set; }


        [Key(10)]
        public string? RemoteIP { get; set; }

        [Key(11)]
        public string? ControlClass { get; set; }

        [Key(12)]
        public string? SceneName { get; set; }

        [Key(13)]
        public List<IotDeviceData>? WhichOneDevice { get; set; }
    }

    [MessagePackObject()]
    public class IotDeviceData
    {
        [Key(0)]
        public string? DeviceName { get; set; }

        [Key(1)]
        public string? DeviceAddress { get; set; }
    }

    public class RestartIOTData:OnOffLineData
    {
        public byte[]? LauncherVersion { get; set; }
        public byte[]? RebootReason { get; set; }
    }

    [GenerateSerializer()]
    [MessagePackObject()]
    public class OnOffLineData
    {
        [Id(0)]
        [Key(0)]
        public string? HotelCode { get; set; }

        [Id(1)]
        [Key(1)]
        public string? MAC { get; set; }

        [Id(2)]
        [Key(2)]
        public string? HostNumber { get; set; }

        [Id(3)]
        [Key(3)]
        public string? EndPoint { get; set; }

        [Id(4)]
        [Key(4)]
        public string? CurrentStatus { get; set; }

        [Id(5)]
        [Key(5)]
        public DateTime CurrentTime { get; set; }

        [Id(6)]
        [Key(6)]
        public string? RoomNumber { get; set; }

        [Id(7)]
        [Key(7)]
        public long? UnixTime { get; set; }
    }


    [MessagePackObject()]
    public class MTakeCardData
    {
        [Key(0)]
        public string? HostNUMBER { get; set; }

        [Key(1)]
        public string? HotelCode { get; set; }

        [Key(2)]
        public byte Status { get; set; }

        [Key(3)]
        public DateTime LastUpdateTime { get; set; }
    }


    public class IOTMonitorData_db
    {
        public ObjectId _id { get; set; }
        public double Step { get; set; }

        public string? RequestId { get; set; }
        public string? Platform { get; set; }

        public string? TriggerTime { get; set; }

        public string? HotelId { get; set; }
        public int HotelCode { get; set; }
        public string? HotelName { get; set; }
        public string? RoomNumber { get; set; }

        public string? CommandDescription { get; set; }

        public DateTime CreateTime { get; set; }


        public string? RemoteIP { get; set; }
        public string? ControlClass { get; set; }

        public string? SceneName { get; set; }
        public List<IotDeviceData>? WhichOneDevice { get; set; }
    }

    public class DevMonitorIOTLogResult_WITH_Count
    {
        public int TotalCount { get; set; }
        public int RequestIdCount { get; set; }

        public int RequestNotContainerCount { get; set; }
        public List<IOTMonitorData_db>? devMonitorLogResults { get; set; }
    }


    public class MTakeCardData_db
    {

        public ObjectId _id { get; set; }
        public string? HostNUMBER { get; set; }
        public string? HotelCode { get; set; }
        public byte Status { get; set; }
        public DateTime LastUpdateTime { get; set; }
    }
    public class OnOffLineData_db
    {
        public ObjectId _id { get; set; }
        public string? HotelCode { get; set; }
        public string? MAC { get; set; }
        public string? HostNumber { get; set; }
        public string? EndPoint { get; set; }
        public string? CurrentStatus { get; set; }
        public DateTime CurrentTime { get; set; }
    }
}
