package com.helldivers.app;

import android.content.Context;
import android.media.AudioManager;
import android.media.ToneGenerator;
import android.os.Handler;
import android.os.Looper;

/**
 * SoundManager - Gestor de sonidos usando ToneGenerator
 * Compatible con API 18+, mas ligero que SoundPool para dispositivos de baja potencia
 */
public class SoundManager {

    private static final int VOLUME = 80; // 0-100

    private ToneGenerator toneGenerator;
    private Handler handler;
    private boolean enabled = true;

    public SoundManager(Context context) {
        // ToneGenerator.STREAM_MUSIC para compatibilidad API 18+
        toneGenerator = new ToneGenerator(AudioManager.STREAM_MUSIC, VOLUME);
        handler = new Handler(Looper.getMainLooper());
    }

    /**
     * Sonido de click de boton - tono corto y agudo
     */
    public void playButtonClick() {
        if (!enabled || toneGenerator == null) return;
        // Tono DTMF 6 - sonido tipo boton tactil
        toneGenerator.startTone(ToneGenerator.TONE_DTMF_6, 80);
    }

    /**
     * Sonido de exito - secuencia ascendente
     */
    public void playSuccess() {
        if (!enabled || toneGenerator == null) return;
        // Tono de confirmacion propositivo
        toneGenerator.startTone(ToneGenerator.TONE_PROP_ACK, 150);
    }

    /**
     * Sonido de fallo - tono bajo grave
     */
    public void playFailure() {
        if (!enabled || toneGenerator == null) return;
        // Tono de error
        toneGenerator.startTone(ToneGenerator.TONE_PROP_NACK, 200);
    }

    /**
     * Tono para direcciones del juego
     * Usa diferentes tonos DTMF para cada direccion
     */
    public void playTone(int direction) {
        if (!enabled || toneGenerator == null) return;

        int tone;
        switch (direction) {
            case 0: // UP
                tone = ToneGenerator.TONE_DTMF_2;
                break;
            case 1: // DOWN
                tone = ToneGenerator.TONE_DTMF_8;
                break;
            case 2: // LEFT
                tone = ToneGenerator.TONE_DTMF_4;
                break;
            case 3: // RIGHT
                tone = ToneGenerator.TONE_DTMF_6;
                break;
            default:
                tone = ToneGenerator.TONE_DTMF_0;
        }
        toneGenerator.startTone(tone, 100);
    }

    /**
     * Tono de inicio de secuencia
     */
    public void playSequenceStart() {
        if (!enabled || toneGenerator == null) return;
        toneGenerator.startTone(ToneGenerator.TONE_SUP_DIAL, 100);
    }

    /**
     * Tono de alerta/peligro
     */
    public void playAlert() {
        if (!enabled || toneGenerator == null) return;
        toneGenerator.startTone(ToneGenerator.TONE_CDMA_ALERT_CALL_GUARD, 150);
    }

    public void setEnabled(boolean enabled) {
        this.enabled = enabled;
    }

    public boolean isEnabled() {
        return enabled;
    }

    /**
     * Stub para compatibilidad con ciclo de vida Activity
     * ToneGenerator no necesita pause/resume explicito
     */
    public void pause() {
        // No-op: ToneGenerator se maneja automaticamente
    }

    /**
     * Stub para compatibilidad con ciclo de vida Activity
     * ToneGenerator no necesita pause/resume explicito
     */
    public void resume() {
        // No-op: ToneGenerator se maneja automaticamente
    }

    public void release() {
        if (toneGenerator != null) {
            toneGenerator.release();
            toneGenerator = null;
        }
    }
}