import Phaser from 'phaser';

/**
 * Classe SuperTreasure (Super Trésor)
 * Représente un trésor rare et précieux avec beaucoup de points
 * Effet visuel spécial : rotation + pulsation + particules
 */
export class SuperTreasure extends Phaser.Physics.Arcade.Sprite {
    private pulseTimer: Phaser.Time.TimerEvent;

    constructor(scene: Phaser.Scene, x: number, y: number) {
        super(scene, x, y, 'supertreasure');

        scene.add.existing(this);
        scene.physics.add.existing(this);

        // Créer texture temporaire si elle n'existe pas
        if (!scene.textures.exists('supertreasure')) {
            this.createPlaceholderTexture(scene);
        }

        this.setTexture('supertreasure');

        // Taille plus grande que les cadeaux normaux
        this.setScale(1.5);

        // Animation de rotation rapide
        scene.tweens.add({
            targets: this,
            angle: 360,
            duration: 1500,
            repeat: -1,
            ease: 'Linear',
        });

        // Animation de flottement vertical plus prononcée
        scene.tweens.add({
            targets: this,
            y: y - 20,
            duration: 800,
            yoyo: true,
            repeat: -1,
            ease: 'Sine.easeInOut',
        });

        // Animation de pulsation (scale)
        scene.tweens.add({
            targets: this,
            scaleX: 1.7,
            scaleY: 1.7,
            duration: 1000,
            yoyo: true,
            repeat: -1,
            ease: 'Sine.easeInOut',
        });

        // Effet de brillance (changement d'alpha)
        this.pulseTimer = scene.time.addEvent({
            delay: 200,
            callback: () => {
                this.setAlpha(0.7 + Math.random() * 0.3);
            },
            loop: true,
        });

        // Étoiles qui tournent autour (effet particules simplifié)
        this.createStarEffect(scene, x, y);
    }

    /**
     * Crée une texture temporaire pour le super trésor
     */
    private createPlaceholderTexture(scene: Phaser.Scene): void {
        const graphics = scene.add.graphics();

        // Forme de diamant/trésor (plus grand et plus complexe)
        // Centre doré
        graphics.fillStyle(0xFFD700, 1); // Or
        graphics.fillCircle(25, 25, 20);

        // Contour brillant
        graphics.lineStyle(3, 0xFFFFFF, 1);
        graphics.strokeCircle(25, 25, 20);

        // Étoile au centre
        graphics.fillStyle(0xFFFFFF, 1);
        const points = [];
        for (let i = 0; i < 5; i++) {
            const angle = (i * 144 - 90) * (Math.PI / 180);
            points.push(25 + Math.cos(angle) * 12);
            points.push(25 + Math.sin(angle) * 12);
        }
        graphics.fillPoints(points, true);

        // Effet de brillance (petits cercles)
        graphics.fillStyle(0xFFFF00, 0.8); // Jaune brillant
        graphics.fillCircle(15, 15, 4);
        graphics.fillCircle(35, 15, 4);
        graphics.fillCircle(15, 35, 4);
        graphics.fillCircle(35, 35, 4);

        graphics.generateTexture('supertreasure', 50, 50);
        graphics.destroy();
    }

    /**
     * Crée un effet d'étoiles qui tournent autour du trésor
     */
    private createStarEffect(scene: Phaser.Scene, x: number, y: number): void {
        // Créer 3 petites étoiles qui tournent
        for (let i = 0; i < 3; i++) {
            const star = scene.add.circle(x, y, 3, 0xFFFFFF, 0.8);
            star.setDepth(this.depth - 1);

            const radius = 40;

            scene.tweens.add({
                targets: star,
                angle: 360 + (i * 120),
                duration: 2000,
                repeat: -1,
                ease: 'Linear',
                onUpdate: () => {
                    const currentAngle = Phaser.Math.DegToRad(star.angle);
                    star.x = this.x + Math.cos(currentAngle) * radius;
                    star.y = this.y + Math.sin(currentAngle) * radius;
                },
            });
        }
    }

    /**
     * Nettoie les ressources
     */
    destroy(): void {
        if (this.pulseTimer) {
            this.pulseTimer.destroy();
        }
        super.destroy();
    }
}
