import json
import os
import logging
import config
from datetime import datetime

logger = logging.getLogger(__name__)

# Chemin par défaut pour history.json
DEFAULT_HISTORY_PATH = os.path.join(config.SAVE_FOLDER, "history.json")

def init_history():
    """Initialise le fichier history.json s'il n'existe pas."""
    history_path = getattr(config, 'HISTORY_PATH', DEFAULT_HISTORY_PATH)
    # Vérifie si le fichier history.json existe, sinon le crée
    if not os.path.exists(history_path):
        try:
            os.makedirs(os.path.dirname(history_path), exist_ok=True)
            with open(history_path, "w", encoding='utf-8') as f:
                json.dump([], f)  # Initialise avec une liste vide
            logger.info(f"Fichier d'historique créé : {history_path}")
        except OSError as e:
            logger.error(f"Erreur lors de la création du fichier d'historique : {e}")
    else:
        logger.info(f"Fichier d'historique trouvé : {history_path}")
    return history_path

def load_history():
    """Charge l'historique depuis history.json."""
    history_path = getattr(config, 'HISTORY_PATH', DEFAULT_HISTORY_PATH)
    try:
        if not os.path.exists(history_path):
            logger.debug(f"Aucun fichier d'historique trouvé à {history_path}")
            return []
        with open(history_path, "r", encoding='utf-8') as f:
            history = json.load(f)
            # Valider la structure : liste de dictionnaires avec 'platform', 'game_name', 'status'
            for entry in history:
                if not all(key in entry for key in ['platform', 'game_name', 'status']):
                    logger.warning(f"Entrée d'historique invalide : {entry}")
                    return []
            logger.debug(f"Historique chargé depuis {history_path}, {len(history)} entrées")
            return history
    except (FileNotFoundError, json.JSONDecodeError) as e:
        logger.error(f"Erreur lors de la lecture de {history_path} : {e}")
        return []

def save_history(history):
    """Sauvegarde l'historique dans history.json."""
    history_path = getattr(config, 'HISTORY_PATH', DEFAULT_HISTORY_PATH)
    try:
        os.makedirs(os.path.dirname(history_path), exist_ok=True)
        with open(history_path, "w", encoding='utf-8') as f:
            json.dump(history, f, indent=2, ensure_ascii=False)
        logger.debug(f"Historique sauvegardé dans {history_path}")
    except Exception as e:
        logger.error(f"Erreur lors de l'écriture de {history_path} : {e}")

def add_to_history(platform, game_name, status, url=None, progress=0, message=None, timestamp=None):
    """Ajoute une entrée à l'historique."""
    history = load_history()
    entry = {
        "platform": platform,
        "game_name": game_name,
        "status": status,
        "url": url,
        "progress": progress,
        "timestamp": timestamp or datetime.now().strftime("%Y-%m-%d %H:%M:%S")
    }
    if message:
        entry["message"] = message
    history.append(entry)
    save_history(history)
    logger.info(f"Ajout à l'historique : platform={platform}, game_name={game_name}, status={status}, progress={progress}")
    return entry

def clear_history():
    """Vide l'historique."""
    history_path = getattr(config, 'HISTORY_PATH', DEFAULT_HISTORY_PATH)
    try:
        with open(history_path, "w", encoding='utf-8') as f:
            json.dump([], f)
        logger.info(f"Historique vidé : {history_path}")
    except Exception as e:
        logger.error(f"Erreur lors du vidage de {history_path} : {e}")