package com.example.boidelov3.data;

import com.example.boidelov3.Question;

/**
 * Catégories de questions avec leurs couleurs associées
 * Permet de classer les questions et d'appliquer des fonds dynamiques
 */
public class QuestionCategory {

    public enum Category {
        CIBLAGE("Ciblage", "Questions qui ciblent un groupe spécifique", 0xFFFF6B6B),        // Rouge doux
        CLASSEMENT("Classement", "Vote pour élire le meilleur/pire", 0xFF4ECDC4),          // Turquoise
        JUGEMENT("Jugement", "J1 doit juger ou comparer des joueurs", 0xFFA8E6CF),        // Menthe
        DUEL("Duel J1/J2", "Compétition ou interaction entre 2 joueurs", 0xFFFFD93D),      // Jaune
        INTERACTIF("Interactif", "Quiz, devinettes, jeux de groupe", 0xFF6C5CE7),          // Violet
        DEFI_MANCHES("Défi", "Défi à manches avec durée limitée", 0xFF0984E3),              // Bleu
        VARIANTE("Variante", "Questions avec choix multiples", 0xFF00B894),                // Vert menthe
        CALIENTE("Caliente", "Questions chaudes/spéciales", 0xFFE84393),                   // Rouge vif
        VOTE("Vote", "Vote à main levée", 0xFFFD79A8),                                    // Rose
        CLASSIQUE("Classique", "Question standard", 0xFFDFE6E9);                           // Gris clair

        private final String name;
        private final String description;
        private final int color;

        Category(String name, String description, int color) {
            this.name = name;
            this.description = description;
            this.color = color;
        }

        public String getName() {
            return name;
        }

        public String getDescription() {
            return description;
        }

        public int getColor() {
            return color;
        }
    }

    /**
     * Détecte la catégorie d'une question basée sur son contenu
     */
    public static Category detectCategory(Question question) {
        if (question == null) {
            return Category.CLASSIQUE;
        }

        String text = question.getQuestion();
        if (text == null) {
            return Category.CLASSIQUE;
        }

        String questionText = text.toLowerCase();

        // 1. CALIENTE - Priorité haute
        if (question.isCaliente()) {
            return Category.CALIENTE;
        }

        // 2. DÉFI MANCHES - Questions avec <manches>
        if (questionText.contains("<manches>") || question.isManches()) {
            return Category.DEFI_MANCHES;
        }

        // 3. CIBLAGE - "Ceux qui", "Les joueurs qui", "Toutes celles", "Tous ceux"
        if (questionText.startsWith("ceux qui") ||
            questionText.startsWith("les joueurs qui") ||
            questionText.startsWith("toutes celles") ||
            questionText.startsWith("tous ceux") ||
            questionText.startsWith("les joueurs de") ||
            questionText.startsWith("celles") && questionText.contains("ont") ||
            questionText.startsWith("les joueurs de") ||
            questionText.startsWith("le groupe de")) {
            return Category.CIBLAGE;
        }

        // 4. CLASSEMENT - "Le/La plus", "Élisez", "Le premier", "Qui a le plus"
        if ((questionText.startsWith("le/là plus") ||
             questionText.startsWith("le plus") ||
             questionText.startsWith("la plus") ||
             questionText.contains("élisez") ||
             questionText.startsWith("le premier") ||
             questionText.startsWith("la première") ||
             questionText.startsWith("qui a le plus") ||
             questionText.startsWith("celui/celle qui a le")) &&
            !questionText.contains("<j1>")) {
            return Category.CLASSEMENT;
        }

        // 5. VOTE - "Votez tous en même temps", "Vote à main levée"
        if (questionText.contains("votez tous en même temps") ||
            questionText.contains("vote à main levée") ||
            questionText.contains("votez et le perdant")) {
            return Category.VOTE;
        }

        // 6. JUGEMENT - "<J1> à toi de juger", "entre <J1> et <J2>", "qui de <J2> ou <J3>"
        if ((questionText.contains("juge") ||
             questionText.contains("entre <j1> et <j2>") ||
             questionText.contains("qui de <j2> ou <j3>") ||
             questionText.contains("selon toi")) &&
            questionText.contains("<j1>")) {
            return Category.JUGEMENT;
        }

        // 7. DUEL J1/J2 - "<J1> et <J2> se regardent", "<J1> vs <J2>", bras de fer, etc.
        if ((questionText.contains("<j1> et <j2>") && !questionText.contains("variante")) ||
            questionText.contains("bras de fer") ||
            questionText.contains("clash") ||
            questionText.contains("duel") ||
            questionText.contains("concours")) {
            return Category.DUEL;
        }

        // 8. INTERACTIF - Quiz, devinettes, mimes, karaoké, imitations
        if (questionText.contains("quiz") ||
            questionText.contains("devin") ||
            questionText.contains("mime") ||
            questionText.contains("karaoké") ||
            questionText.contains("imitation") ||
            questionText.contains("concours") ||
            questionText.contains("doit inventer") ||
            questionText.contains("doit créer") ||
            questionText.contains("doit deviner") ||
            questionText.contains("doit mimer") ||
            questionText.contains("doit compléter") ||
            questionText.contains("doit donner") && questionText.contains("compliment") ||
            questionText.contains("doit nommer") && questionText.contains("qualité")) {
            return Category.INTERACTIF;
        }

        // 9. VARIANTE - Questions avec <variante>
        if (question.getVariante() != null && !question.getVariante().isEmpty()) {
            return Category.VARIANTE;
        }

        // 10. CLASSIQUE - Par défaut
        return Category.CLASSIQUE;
    }

    /**
     * Retourne la couleur associée à une catégorie
     */
    public static int getColorForCategory(Category category) {
        return category.getColor();
    }

    /**
     * Retourne le nom de la catégorie
     */
    public static String getNameForCategory(Category category) {
        return category.getName();
    }
}
