/*
 * Copyright (C) 2007-2024 C# Port
 * Original Copyright (C) 2007-2018 Siemens AG
 *
 * Iso2EXIDocument - 1:1 replica of VC2022 iso2EXIDocument structure
 * ISO 15118-20 version
 */

using V2GDecoderNet.V2G;

namespace V2GDecoderNet.EXI
{
    /// <summary>
    /// 1:1 replica of VC2022's struct iso2EXIDocument for ISO 15118-20
    /// This enables exact debugging comparison and identical call sequences
    /// </summary>
    public class Iso2EXIDocument
    {
        // Core V2G_Message for ISO2
        public bool V2G_Message_isUsed { get; set; }
        public V2GMessageExact V2G_Message { get; set; } = new V2GMessageExact();
        
        // ISO2-specific message types
        public bool SessionSetupReq_isUsed { get; set; }
        public bool SessionSetupRes_isUsed { get; set; }
        public bool AuthorizationSetupReq_isUsed { get; set; }
        public bool AuthorizationSetupRes_isUsed { get; set; }
        public bool AuthorizationReq_isUsed { get; set; }
        public bool AuthorizationRes_isUsed { get; set; }
        public bool ServiceDiscoveryReq_isUsed { get; set; }
        public bool ServiceDiscoveryRes_isUsed { get; set; }
        public bool ServiceDetailReq_isUsed { get; set; }
        public bool ServiceDetailRes_isUsed { get; set; }
        public bool ServiceSelectionReq_isUsed { get; set; }
        public bool ServiceSelectionRes_isUsed { get; set; }
        public bool ScheduleExchangeReq_isUsed { get; set; }
        public bool ScheduleExchangeRes_isUsed { get; set; }
        public bool PowerDeliveryReq_isUsed { get; set; }
        public bool PowerDeliveryRes_isUsed { get; set; }
        public bool SessionStopReq_isUsed { get; set; }
        public bool SessionStopRes_isUsed { get; set; }
        
        // DC charging specific (ISO2)
        public bool DC_ChargeParameterDiscoveryReq_isUsed { get; set; }
        public bool DC_ChargeParameterDiscoveryRes_isUsed { get; set; }
        public bool DC_CableCheckReq_isUsed { get; set; }
        public bool DC_CableCheckRes_isUsed { get; set; }
        public bool DC_PreChargeReq_isUsed { get; set; }
        public bool DC_PreChargeRes_isUsed { get; set; }
        public bool DC_ChargeLoopReq_isUsed { get; set; }
        public bool DC_ChargeLoopRes_isUsed { get; set; }
        public bool DC_WeldingDetectionReq_isUsed { get; set; }
        public bool DC_WeldingDetectionRes_isUsed { get; set; }
        
        // AC charging specific (ISO2)  
        public bool AC_ChargeParameterDiscoveryReq_isUsed { get; set; }
        public bool AC_ChargeParameterDiscoveryRes_isUsed { get; set; }
        public bool AC_ChargeLoopReq_isUsed { get; set; }
        public bool AC_ChargeLoopRes_isUsed { get; set; }
        
        // Additional ISO2 message types
        public bool CertificateInstallationReq_isUsed { get; set; }
        public bool CertificateInstallationRes_isUsed { get; set; }
        public bool VehicleCheckInReq_isUsed { get; set; }
        public bool VehicleCheckInRes_isUsed { get; set; }
        public bool VehicleCheckOutReq_isUsed { get; set; }
        public bool VehicleCheckOutRes_isUsed { get; set; }
        
        /// <summary>
        /// Initialize document structure - equivalent to init_iso2EXIDocument()
        /// </summary>
        public void Initialize()
        {
            // Reset all _isUsed flags to false (VC2022 behavior)
            V2G_Message_isUsed = false;
            SessionSetupReq_isUsed = false;
            SessionSetupRes_isUsed = false;
            AuthorizationSetupReq_isUsed = false;
            AuthorizationSetupRes_isUsed = false;
            AuthorizationReq_isUsed = false;
            AuthorizationRes_isUsed = false;
            ServiceDiscoveryReq_isUsed = false;
            ServiceDiscoveryRes_isUsed = false;
            ServiceDetailReq_isUsed = false;
            ServiceDetailRes_isUsed = false;
            ServiceSelectionReq_isUsed = false;
            ServiceSelectionRes_isUsed = false;
            ScheduleExchangeReq_isUsed = false;
            ScheduleExchangeRes_isUsed = false;
            PowerDeliveryReq_isUsed = false;
            PowerDeliveryRes_isUsed = false;
            SessionStopReq_isUsed = false;
            SessionStopRes_isUsed = false;
            
            DC_ChargeParameterDiscoveryReq_isUsed = false;
            DC_ChargeParameterDiscoveryRes_isUsed = false;
            DC_CableCheckReq_isUsed = false;
            DC_CableCheckRes_isUsed = false;
            DC_PreChargeReq_isUsed = false;
            DC_PreChargeRes_isUsed = false;
            DC_ChargeLoopReq_isUsed = false;
            DC_ChargeLoopRes_isUsed = false;
            DC_WeldingDetectionReq_isUsed = false;
            DC_WeldingDetectionRes_isUsed = false;
            
            AC_ChargeParameterDiscoveryReq_isUsed = false;
            AC_ChargeParameterDiscoveryRes_isUsed = false;
            AC_ChargeLoopReq_isUsed = false;
            AC_ChargeLoopRes_isUsed = false;
            
            CertificateInstallationReq_isUsed = false;
            CertificateInstallationRes_isUsed = false;
            VehicleCheckInReq_isUsed = false;
            VehicleCheckInRes_isUsed = false;
            VehicleCheckOutReq_isUsed = false;
            VehicleCheckOutRes_isUsed = false;
            
            // Initialize V2G_Message structure
            V2G_Message = new V2GMessageExact();
        }
    }
}