#ifndef EFFECT_CONFIG_H
#define EFFECT_CONFIG_H

#include <string>
#include <vector>
struct EffectDelayGeneralSettings {
    float HitCharacterModelEffectSpread = 999.0f;
    bool HitCharacterModelEffectSpreadEnable = true;
    
    float HitCharacterModelEffectDelay = 999.0f;
    bool HitCharacterModelEffectDelayEnable = true;
    
    float CharacterModelEffectDelay = 999.0f;
    bool CharacterModelEffectDelayEnable = true;
    
    float CharacterHitEffectDelay = 999.0f;
    bool CharacterHitEffectDelayEnable = true;
    
    float EffectTrackingDelay = 999.0f;
    bool EffectTrackingDelayEnable = true;
   
    float CharacterEffectDelay = 999.0f;
    bool CharacterEffectDelayEnable = true;
    
    float CharacterHitEffectDelayProbability = 999.0f;
    bool CharacterHitEffectDelayProbabilityEnable = true;
    
    float CharacterEffectDelayIntensity = 999.0f;
    bool CharacterEffectDelayIntensityEnable = true;
    
    float CharacterEffectDelayTriggerProbability = 999.0f;
    bool CharacterEffectDelayTriggerProbabilityEnable = true;
    
    float HitCharacterEffectEnlarge = 999.0f;
    bool HitCharacterEffectEnlargeEnable = true;
    
    float HitCharacterEffectResidualDelay = 999.0f;
    bool HitCharacterEffectResidualDelayEnable = true;
    
    float HitCharacterBoneEffectDelay = 999.0f;
    bool HitCharacterBoneEffectDelayEnable = true;
    
    float HitEffectHitCharacterVolumeEnlarge = 999.0f;
    bool HitEffectHitCharacterVolumeEnlargeEnable = true;
    
    float HitEffectHitCharacterVolumeDelay = 999.0f;
    bool HitEffectHitCharacterVolumeDelayEnable = true;
    
    float HitEffectDelayTriggerMaxDistance = 999.0f;
    bool HitEffectDelayTriggerMaxDistanceEnable = true;
    
    float HitEffectDelayTriggerMinDistance = 999.0f;
    bool HitEffectDelayTriggerMinDistanceEnable = true;
    
    float HitEffectIntensity = 999.0f;
    bool HitEffectIntensityEnable = true;
    
    float EffectDelayIntensity = 999.0f;
    bool EffectDelayIntensityEnable = true;
    
    float HitCharacterEffectResidualDelayProbability = 999.0f;
    bool HitCharacterEffectResidualDelayProbabilityEnable = true;
    
    float EffectDelayPredictCharacterActionTriggerProbability = 999.0f;
    bool EffectDelayPredictCharacterActionTriggerProbabilityEnable = true;
    
    std::string EffectDelayPredictCharacterAction = "jump/move/crouch";
    bool EffectDelayPredictCharacterActionEnable = true;
    
    float HitCharacterEffectTracking = 999.0f;
    bool HitCharacterEffectTrackingEnable = true;
};

struct BulletHitCharacterEffectSettings {
    float BulletHitCharacterModelEffectTrackingDelay = 999.0f;
    bool BulletHitCharacterModelEffectTrackingDelayEnable = true;
    
    float BulletHitCharacterModelEffectDelay = 999.0f;
    bool BulletHitCharacterModelEffectDelayEnable = true;
    
    float BulletHitCharacterModelEffectEnhance = 999.0f;
    bool BulletHitCharacterModelEffectEnhanceEnable = true;
    
    float BulletHitCharacterModelEffectDepth = 999.0f;
    bool BulletHitCharacterModelEffectDepthEnable = true;
    
    float BulletHitCharacterModelEffectDelayProbability = 999.0f;
    bool BulletHitCharacterModelEffectDelayProbabilityEnable = true;
    
    float BulletEnhanceCharacterEffectDelayProbability = 999.0f;
    bool BulletEnhanceCharacterEffectDelayProbabilityEnable = true;
    
    float BulletHitEffectDelay = 999.0f;
    bool BulletHitEffectDelayEnable = true;
    
    float BulletHitEffectTrackingDelay = 999.0f;
    bool BulletHitEffectTrackingDelayEnable = true;
    
    float BulletHitEffectDeepen = 999.0f;
    bool BulletHitEffectDeepenEnable = true;
    
    float BulletHitEffectSpread = 999.0f;
    bool BulletHitEffectSpreadEnable = true;
    
    float BulletHitEffectDiffusion = 999.0f;
    bool BulletHitEffectDiffusionEnable = true;
    
    float BulletTrackingEffect = 999.0f;
    bool BulletTrackingEffectEnable = true;
    
    float TrackingEffectDelay = 999.0f;
    bool TrackingEffectDelayEnable = true;
};

class EffectConfigManager {
private:
    EffectDelayGeneralSettings m_effectDelaySettings;
    BulletHitCharacterEffectSettings m_bulletEffectSettings;
    std::string m_configPath;
    
public:
    EffectConfigManager(const std::string& configPath = "GameEffectConfig.ini") 
        : m_configPath(configPath) {}
    
    bool LoadConfig() {
        return true;
    }
    bool SaveConfig() {
        return true;
    }
    const EffectDelayGeneralSettings& GetEffectDelaySettings() const {
        return m_effectDelaySettings;
    }
    const BulletHitCharacterEffectSettings& GetBulletEffectSettings() const {
        return m_bulletEffectSettings;
    }
    void SetEffectDelaySettings(const EffectDelayGeneralSettings& settings) {
        m_effectDelaySettings = settings;
    }
    
    void SetBulletEffectSettings(const BulletHitCharacterEffectSettings& settings) {
        m_bulletEffectSettings = settings;
    }
    bool ValidateConfig() const {
        return true;
    }
    
    void ResetToDefault() {
        m_effectDelaySettings = EffectDelayGeneralSettings();
        m_bulletEffectSettings = BulletHitCharacterEffectSettings();
    }
};

class GameEffectSystem {
private:
    EffectConfigManager m_configManager;
    
public:
    GameEffectSystem() {
        if (m_configManager.LoadConfig()) {
            ApplyEffectSettings();
        }
    }
    
    void ApplyEffectSettings() {
        const auto& effectSettings = m_configManager.GetEffectDelaySettings();
        const auto& bulletSettings = m_configManager.GetBulletEffectSettings();
        ApplyHitEffectDelay(effectSettings.HitCharacterModelEffectDelay);
        ApplyTrackingDelay(effectSettings.EffectTrackingDelay);
        ApplyBulletHitEffects(bulletSettings);
    }
    
private:
    void ApplyHitEffectDelay(float delay) {
    }
    
    void ApplyTrackingDelay(float delay) {
    }
    
    void ApplyBulletHitEffects(const BulletHitCharacterEffectSettings& settings)
    }
};

#endif
