import { Response_ResponseType, Map, Characteristic, GameplayModifiers_GameOptions } from 'moons-ta-client';

// Beat Saber Modifiers with incompatibility groups
export interface Modifier {
    id: GameplayModifiers_GameOptions;
    name: string;
    description: string;
    enabled: boolean;
    group: string;
    incompatibilityGroup?: string; // Modifiers in same group are mutually exclusive
    allowedInMode?: ('qualifier' | 'playing')[];
}

// Game modifiers with proper grouping and mode restrictions
export const allGameModifiers: Modifier[] = [
    // Failure Prevention (mutually exclusive)
    { 
        id: GameplayModifiers_GameOptions.NoFail, 
        name: "No Fail", 
        description: "You can't fail the level", 
        enabled: false, 
        group: "Failure Prevention",
        incompatibilityGroup: "failure",
        allowedInMode: ['qualifier', 'playing']
    },
    { 
        id: GameplayModifiers_GameOptions.InstaFail, 
        name: "One Life", 
        description: "You only have one life", 
        enabled: false, 
        group: "Failure Prevention",
        incompatibilityGroup: "failure",
        allowedInMode: ['qualifier', 'playing']
    },
    { 
        id: GameplayModifiers_GameOptions.BatteryEnergy, 
        name: "Four Lives", 
        description: "You have four lives", 
        enabled: false, 
        group: "Failure Prevention",
        incompatibilityGroup: "failure",
        allowedInMode: ['qualifier', 'playing']
    },
    
    // Environment Modifiers
    { 
        id: GameplayModifiers_GameOptions.NoBombs, 
        name: "No Bombs", 
        description: "No bombs will appear", 
        enabled: false, 
        group: "Environment",
        allowedInMode: ['qualifier', 'playing']
    },
    { 
        id: GameplayModifiers_GameOptions.NoObstacles, 
        name: "No Walls", 
        description: "No walls will appear", 
        enabled: false, 
        group: "Environment",
        allowedInMode: ['qualifier', 'playing']
    },
    
    // Note Modifiers (some mutually exclusive)
    { 
        id: GameplayModifiers_GameOptions.NoArrows, 
        name: "No Arrows", 
        description: "All notes can be cut in any direction", 
        enabled: false, 
        group: "Note Modifiers",
        incompatibilityGroup: "arrows",
        allowedInMode: ['qualifier', 'playing']
    },
    { 
        id: GameplayModifiers_GameOptions.DisappearingArrows, 
        name: "Disappearing Arrows", 
        description: "Arrows disappear as they approach you", 
        enabled: false, 
        group: "Note Modifiers",
        incompatibilityGroup: "arrows",
        allowedInMode: ['qualifier', 'playing']
    },
    { 
        id: GameplayModifiers_GameOptions.GhostNotes, 
        name: "Ghost Notes", 
        description: "Note colors are hidden", 
        enabled: false, 
        group: "Note Modifiers",
        allowedInMode: ['qualifier', 'playing']
    },
    
    // Speed Modifiers (mutually exclusive)
    { 
        id: GameplayModifiers_GameOptions.SlowSong, 
        name: "Slower Song", 
        description: "Reduces the song speed by 15%", 
        enabled: false, 
        group: "Speed",
        incompatibilityGroup: "speed",
        allowedInMode: ['qualifier', 'playing']
    },
    { 
        id: GameplayModifiers_GameOptions.FastSong, 
        name: "Faster Song", 
        description: "Increases the song speed by 20%", 
        enabled: false, 
        group: "Speed",
        incompatibilityGroup: "speed",
        allowedInMode: ['qualifier', 'playing']
    },
    { 
        id: GameplayModifiers_GameOptions.SuperFastSong, 
        name: "Super Fast Song", 
        description: "Increases the song speed by 50%", 
        enabled: false, 
        group: "Speed",
        incompatibilityGroup: "speed",
        allowedInMode: ['qualifier', 'playing']
    },
    
    // Visual Modifiers (some mutually exclusive)
    { 
        id: GameplayModifiers_GameOptions.SmallCubes, 
        name: "Small Notes", 
        description: "Notes are smaller", 
        enabled: false, 
        group: "Visual",
        allowedInMode: ['qualifier', 'playing']
    },
    { 
        id: GameplayModifiers_GameOptions.ProMode, 
        name: "Pro Mode", 
        description: "Makes notes smaller, removes debris, and adds hit scores", 
        enabled: false, 
        group: "Visual",
        allowedInMode: ['qualifier', 'playing']
    },
    
    // Special Modifiers
    { 
        id: GameplayModifiers_GameOptions.ZenMode, 
        name: "Zen Mode", 
        description: "No fail, no bombs, reduced obstacles", 
        enabled: false, 
        group: "Special",
        allowedInMode: ['playing'] // Only for playing mode
    },
    { 
        id: GameplayModifiers_GameOptions.StrictAngles, 
        name: "Strict Angles", 
        description: "Stricter angle enforcement for cuts", 
        enabled: false, 
        group: "Special",
        allowedInMode: ['qualifier', 'playing']
    }
];