package com.example.boidelov3.utils;

import android.media.AudioAttributes;
import android.media.SoundPool;
import android.os.Handler;
import android.os.Looper;
import android.util.Log;

/**
 * Générateur de sons utilisant ToneGenerator
 * Permet de créer des sons sans fichiers audio externes
 */
public class SoundGenerator {
    private android.media.ToneGenerator toneGenerator;
    private Handler handler;
    private boolean isMuted = false;

    public SoundGenerator() {
        // Volume: 0-100
        toneGenerator = new android.media.ToneGenerator(
            android.media.AudioManager.STREAM_MUSIC, 80
        );
        handler = new Handler(Looper.getMainLooper());
    }

    /**
     * Son de clic - court et léger
     */
    public synchronized void playClick() {
        if (isMuted || toneGenerator == null) return;
        new Thread(() -> {
            try {
                toneGenerator.startTone(
                    android.media.ToneGenerator.TONE_PROP_BEEP,
                    50
                );
            } catch (Exception e) {
                Log.e("SoundGenerator", "Erreur lors de la lecture du son de clic", e);
            }
        }).start();
    }

    /**
     * Son de succès - mélange ascendant
     */
    public synchronized void playSuccess() {
        if (isMuted || toneGenerator == null) return;
        new Thread(() -> {
            try {
                Thread.sleep(0);
                toneGenerator.startTone(
                    android.media.ToneGenerator.TONE_PROP_NACK,
                    100
                );
                Thread.sleep(120);
                toneGenerator.startTone(
                    android.media.ToneGenerator.TONE_PROP_ACK,
                    150
                );
            } catch (Exception e) {
                Log.e("SoundGenerator", "Erreur lors de la lecture du son de succès", e);
            }
        }).start();
    }

    /**
     * Son de manche - dramatique pour annoncer un défi
     */
    public synchronized void playManche() {
        if (isMuted || toneGenerator == null) return;
        new Thread(() -> {
            try {
                // Premier ton grave
                toneGenerator.startTone(
                    android.media.ToneGenerator.TONE_PROP_BEEP2,
                    200
                );
                Thread.sleep(250);
                // Deuxième ton plus aigu
                toneGenerator.startTone(
                    android.media.ToneGenerator.TONE_PROP_BEEP,
                    300
                );
            } catch (Exception e) {
                Log.e("SoundGenerator", "Erreur lors de la lecture du son de manche", e);
            }
        }).start();
    }

    /**
     * Son de fin - célébration
     */
    public synchronized void playFin() {
        if (isMuted || toneGenerator == null) return;
        new Thread(() -> {
            try {
                // Séquence festive
                toneGenerator.startTone(
                    android.media.ToneGenerator.TONE_PROP_ACK,
                    150
                );
                Thread.sleep(180);
                toneGenerator.startTone(
                    android.media.ToneGenerator.TONE_PROP_NACK,
                    150
                );
                Thread.sleep(180);
                toneGenerator.startTone(
                    android.media.ToneGenerator.TONE_PROP_ACK,
                    250
                );
            } catch (Exception e) {
                Log.e("SoundGenerator", "Erreur lors de la lecture du son de fin", e);
            }
        }).start();
    }

    /**
     * Activer/Désactiver le son
     */
    public synchronized void setMuted(boolean muted) {
        this.isMuted = muted;
    }

    /**
     * Libérer les ressources
     */
    public synchronized void release() {
        if (toneGenerator != null) {
            toneGenerator.release();
            toneGenerator = null;
        }
    }
}
