import Phaser from 'phaser';

/**
 * Bouton de saut tactile pour mobile (affiché en bas à droite)
 */
export class JumpButton {
    private scene: Phaser.Scene;
    private button?: Phaser.GameObjects.Arc;
    private buttonText?: Phaser.GameObjects.Text;
    private isPressed: boolean = false;
    private onJumpCallback?: () => void;

    constructor(scene: Phaser.Scene, onJump?: () => void) {
        this.scene = scene;
        this.onJumpCallback = onJump;
        this.create();
    }

    /**
     * Crée le bouton de saut
     */
    private create(): void {
        const width = this.scene.cameras.main.width;
        const height = this.scene.cameras.main.height;

        // Position en bas à droite
        const x = width - 100;
        const y = height - 100;
        const radius = 60;

        // Cercle du bouton
        this.button = this.scene.add.circle(x, y, radius, 0x4CAF50, 0.7);
        this.button.setStrokeStyle(4, 0xffffff);
        this.button.setScrollFactor(0); // Reste fixe même si la caméra bouge
        this.button.setDepth(1000); // Au-dessus de tout

        // Texte du bouton
        this.buttonText = this.scene.add.text(x, y, '↑', {
            fontSize: '48px',
            color: '#ffffff',
            fontStyle: 'bold',
        });
        this.buttonText.setOrigin(0.5);
        this.buttonText.setScrollFactor(0);
        this.buttonText.setDepth(1001);

        // Rendre interactif
        this.button.setInteractive();

        // Événements tactiles
        this.button.on('pointerdown', () => {
            this.onPress();
        });

        this.button.on('pointerup', () => {
            this.onRelease();
        });

        this.button.on('pointerout', () => {
            this.onRelease();
        });
    }

    /**
     * Appelé quand le bouton est pressé
     */
    private onPress(): void {
        if (this.isPressed) return;

        this.isPressed = true;

        // Animation visuelle
        this.button?.setFillStyle(0x388E3C, 0.9);
        this.button?.setScale(0.95);

        // Callback
        if (this.onJumpCallback) {
            this.onJumpCallback();
        }
    }

    /**
     * Appelé quand le bouton est relâché
     */
    private onRelease(): void {
        this.isPressed = false;

        // Retour visuel
        this.button?.setFillStyle(0x4CAF50, 0.7);
        this.button?.setScale(1);
    }

    /**
     * Vérifie si le bouton est actuellement pressé
     */
    public getIsPressed(): boolean {
        return this.isPressed;
    }

    /**
     * Affiche ou cache le bouton
     */
    public setVisible(visible: boolean): void {
        this.button?.setVisible(visible);
        this.buttonText?.setVisible(visible);
    }

    /**
     * Détruit le bouton
     */
    public destroy(): void {
        this.button?.destroy();
        this.buttonText?.destroy();
    }
}
