/*
 * Copyright (C) 2007-2024 C# Port  
 * Original Copyright (C) 2007-2018 Siemens AG
 *
 * DinEXIDocument - 1:1 replica of VC2022 dinEXIDocument structure
 * DIN SPEC 70121 version
 */

using V2GDecoderNet.V2G;

namespace V2GDecoderNet.EXI
{
    /// <summary>
    /// 1:1 replica of VC2022's struct dinEXIDocument for DIN SPEC 70121
    /// This enables exact debugging comparison and identical call sequences
    /// </summary>
    public class DinEXIDocument
    {
        // Core V2G_Message for DIN
        public bool V2G_Message_isUsed { get; set; }
        public V2GMessageExact V2G_Message { get; set; } = new V2GMessageExact();
        
        // DIN-specific message types
        public bool SessionSetupReq_isUsed { get; set; }
        public bool SessionSetupRes_isUsed { get; set; }
        public bool ServiceDiscoveryReq_isUsed { get; set; }
        public bool ServiceDiscoveryRes_isUsed { get; set; }
        public bool ServicePaymentSelectionReq_isUsed { get; set; }
        public bool ServicePaymentSelectionRes_isUsed { get; set; }
        public bool PaymentDetailsReq_isUsed { get; set; }
        public bool PaymentDetailsRes_isUsed { get; set; }
        public bool ContractAuthenticationReq_isUsed { get; set; }
        public bool ContractAuthenticationRes_isUsed { get; set; }
        public bool ChargeParameterDiscoveryReq_isUsed { get; set; }
        public bool ChargeParameterDiscoveryRes_isUsed { get; set; }
        public bool PowerDeliveryReq_isUsed { get; set; }
        public bool PowerDeliveryRes_isUsed { get; set; }
        public bool ChargingStatusReq_isUsed { get; set; }
        public bool ChargingStatusRes_isUsed { get; set; }
        public bool MeteringReceiptReq_isUsed { get; set; }
        public bool MeteringReceiptRes_isUsed { get; set; }
        public bool SessionStopReq_isUsed { get; set; }
        public bool SessionStopRes_isUsed { get; set; }
        
        // DIN DC charging specific
        public bool CableCheckReq_isUsed { get; set; }
        public bool CableCheckRes_isUsed { get; set; }
        public bool PreChargeReq_isUsed { get; set; }
        public bool PreChargeRes_isUsed { get; set; }
        public bool CurrentDemandReq_isUsed { get; set; }
        public bool CurrentDemandRes_isUsed { get; set; }
        public bool WeldingDetectionReq_isUsed { get; set; }
        public bool WeldingDetectionRes_isUsed { get; set; }
        
        // DIN-specific data types
        public bool BodyElement_isUsed { get; set; }
        public bool DC_EVStatus_isUsed { get; set; }
        public bool DC_EVSEStatus_isUsed { get; set; }
        public bool EVChargeParameter_isUsed { get; set; }
        public bool EVSEChargeParameter_isUsed { get; set; }
        
        // Certificate and security related (DIN)
        public bool CertificateInstallationReq_isUsed { get; set; }
        public bool CertificateInstallationRes_isUsed { get; set; }
        public bool CertificateUpdateReq_isUsed { get; set; }
        public bool CertificateUpdateRes_isUsed { get; set; }
        
        /// <summary>
        /// Initialize document structure - equivalent to init_dinEXIDocument()  
        /// </summary>
        public void Initialize()
        {
            // Reset all _isUsed flags to false (VC2022 behavior)
            V2G_Message_isUsed = false;
            SessionSetupReq_isUsed = false;
            SessionSetupRes_isUsed = false;
            ServiceDiscoveryReq_isUsed = false;
            ServiceDiscoveryRes_isUsed = false;
            ServicePaymentSelectionReq_isUsed = false;
            ServicePaymentSelectionRes_isUsed = false;
            PaymentDetailsReq_isUsed = false;
            PaymentDetailsRes_isUsed = false;
            ContractAuthenticationReq_isUsed = false;
            ContractAuthenticationRes_isUsed = false;
            ChargeParameterDiscoveryReq_isUsed = false;
            ChargeParameterDiscoveryRes_isUsed = false;
            PowerDeliveryReq_isUsed = false;
            PowerDeliveryRes_isUsed = false;
            ChargingStatusReq_isUsed = false;
            ChargingStatusRes_isUsed = false;
            MeteringReceiptReq_isUsed = false;
            MeteringReceiptRes_isUsed = false;
            SessionStopReq_isUsed = false;
            SessionStopRes_isUsed = false;
            
            CableCheckReq_isUsed = false;
            CableCheckRes_isUsed = false;
            PreChargeReq_isUsed = false;
            PreChargeRes_isUsed = false;
            CurrentDemandReq_isUsed = false;
            CurrentDemandRes_isUsed = false;
            WeldingDetectionReq_isUsed = false;
            WeldingDetectionRes_isUsed = false;
            
            BodyElement_isUsed = false;
            DC_EVStatus_isUsed = false;
            DC_EVSEStatus_isUsed = false;
            EVChargeParameter_isUsed = false;
            EVSEChargeParameter_isUsed = false;
            
            CertificateInstallationReq_isUsed = false;
            CertificateInstallationRes_isUsed = false;
            CertificateUpdateReq_isUsed = false;
            CertificateUpdateRes_isUsed = false;
            
            // Initialize V2G_Message structure
            V2G_Message = new V2GMessageExact();
        }
    }
}