namespace DB_Proxima;

public class ProximaSystem
{
    public Boat? Boat { get; set; }
    public System? System { get; set; } 
    public Schedule? Schedule { get; set; }
    public CarrierRobot? CarrierRobot { get; set; }
    public WaferRobot? WaferRobot { get; set; }

    public DataCollection<FIMS>? FIMS { get; set; }
    public DataCollection<LoadPort>? LPs { get; set; }
    public DataCollection<Stocker>? Stockers { get; set; }
    public DataCollection<Heater>? Heaters { get; set; }
}

public class Boat : GeneralDB
{
    public float BoatTestCycledCount { get; set; }
    public bool IsError { get; set; }
    public bool IsOnline { get; set; }
    public float ShutterCycledCount { get; set; }
}

public class CarrierRobot : GeneralDB
{
    public float CurrentExtensionPosition { get; set; }
    public float CurrentThetaPosition { get; set; }
    public float CycleSwapCycledCount { get; set; }
    public bool IsCommandExecutionReady { get; set; }
    public bool IsControllerBatteryLow { get; set; }
    public bool IsError { get; set; }
    public bool IsErrorOccurred { get; set; }
    public bool IsManipulatorBatteryLow { get; set; }
    public bool IsOnline { get; set; }
    public bool IsPause { get; set; }
    public bool IsServoON { get; set; }
    public bool IsWaferPresenceOnBlade1 { get; set; }
    public float SwapCycledCount { get; set; }
    public bool TPStatus { get; set; }
}

public class WaferRobot : GeneralDB
{
    public bool CurrentArm1Position { get; set; }
    public bool CurrentArm2Position { get; set; }
    public bool CurrentExtensionPosition { get; set; }
    public bool CurrentThetaPosition { get; set; }
    public bool CurrentZPosition { get; set; }
    public bool IsCommandExecutionReady { get; set; }
    public bool IsControllerBatteryLow { get; set; }
    public bool IsErrorOccurred { get; set; }
    public bool IsManipulatorBatteryLow { get; set; }
    public bool IsOnline { get; set; }
    public bool IsPause { get; set; }
    public bool IsServoON { get; set; }
    public bool IsWaferPresenceOnBlade1 { get; set; }
    public bool IsWaferPresenceOnBlade2 { get; set; }
    public bool IsWaferPresenceOnBlade3 { get; set; }
    public bool IsWaferPresenceOnBlade4 { get; set; }
    public bool IsWaferPresenceOnBlade5 { get; set; }
    public bool SwapCycledCount { get; set; }
    public bool TPStatus { get; set; }

}

public class FIMS : IBasicInfo
{
    public Guid UID { get; set; }
    public DateTime Time { get; set; }
    public string? Name { get; set; }
    public float FIMSCycledCount { get; set; }
    public bool IsError { get; set; }
    public bool IsOnline { get; set; }
}

public class LoadPort : IBasicInfo
{
    public Guid UID { get; set; }
    public DateTime Time { get; set; }
    public string? Name { get; set; }
    public float CasstleType { get; set; }
    public float InfoPadCarrierIndex { get; set; }
    public float IntAccessMode { get; set; }
    public float IntAccessStatus { get; set; }
    public float IntAssociationState { get; set; }
    public float IntCarrierIDStatus { get; set; }
    public float IntReserveState { get; set; }
    public float IntSlotMapStatus { get; set; }
    public float IntTransferState { get; set; }
    public bool IsAccessSwPressed { get; set; }
    public bool IsAutoDetectCarrierType { get; set; }
    public bool IsClamped { get; set; }
    public bool IsDocked { get; set; }
    public bool IsDoorOpen { get; set; }
    public bool IsError { get; set; }
    public bool IsFoupPresent { get; set; }
    public bool IsMapped { get; set; }
    public bool IsOnline { get; set; }
    public bool IsPlaced { get; set; }
    public bool IsPresent { get; set; }
    public bool IsVerifyPreDefineWaferCount { get; set; }
    public float PreDefineWaferCount { get; set; }
}

public class Schedule : GeneralDB
{
    public bool CoolingRemainTime { get; set; }
    public bool CoolingTime { get; set; }
    public bool CycledCount { get; set; }
    public bool CycledTotalWafer { get; set; }
    public bool CycledWafer { get; set; }
    public bool CycleSetPoint { get; set; }
}

public class Stocker : IBasicInfo
{
    public Guid UID { get; set; }
    public DateTime Time { get; set; }
    public string? Name { get; set; }
    public bool CassetteHasWafer { get; set; }
    public bool FoupPresent { get; set; }
    public bool IsError { get; set; }
    public bool IsOnline { get; set; }
    public bool StatusAbnormal { get; set; }
}

public class Heater : IBasicInfo
{
    public Guid UID { get; set; }
    public DateTime Time { get; set; }
    public string? Name { get; set; }
    public float CascadeControlModeSV { get; set; }
    public float CascadePID_D { get; set; }
    public float CascadePID_I { get; set; }
    public float CascadePID_P { get; set; }
    public float CascadePV { get; set; }
    public float ControlMode { get; set; }
    public float DownRate { get; set; }
    public float HeaterControlModeSV { get; set; }
    public float HeaterPID_D { get; set; }
    public float HeaterPID_I { get; set; }
    public float HeaterPID_P { get; set; }
    public float HeaterPV { get; set; }
    public bool IsAutoManual { get; set; }
    public bool IsCascadeMode { get; set; }
    public bool IsCascadePVBreak { get; set; }
    public bool IsEnableIn { get; set; }
    public bool IsEnableOutput { get; set; }
    public bool IsHeaterPVBreak { get; set; }
    public bool IsSelect { get; set; }
    public float OverTemp { get; set; }
    public float TCOpenOffsetOffset { get; set; }
    public float TempFeedback { get; set; }
    public float TempOffset { get; set; }
    public float TempSetPoint { get; set; }
    public float UpRate { get; set; }
    public float WorkingOutput { get; set; }

}

public class System : IBasicInfo
{
    public Guid UID { get; set; }
    public DateTime Time { get; set; }
    public string? Name { get; set; }
    public bool HasActiveAlarm { get; set; }
    public bool IsAlarm { get; set; }
    public bool IsAlarmConditionBuzzerOn { get; set; }
    public bool IsAutoRunning { get; set; }
    public bool IsBusy { get; set; }
    public bool IsIdle { get; set; }
    public bool IsInitialized { get; set; }
    public bool IsRecipeEditView { get; set; }
    public bool IsSpoolingEnable { get; set; }
    public float SpoolingState { get; set; }
}

public class AlarmSignalHeater : IBasicInfo
{
    public Guid UID { get; set; }
    public DateTime Time { get; set; }
    public string? Name { get; set; }

}