#!/usr/bin/env python3
"""
Exemples d'utilisation du module Odoo pour extraire des tickets.
Ces exemples montrent comment utiliser les fonctions principales depuis un script Python.
"""

import sys
import os
import json
import logging
from datetime import datetime

# Ajouter le répertoire parent au chemin de recherche des modules
sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '../../')))

from odoo.auth_manager import AuthManager
from odoo.ticket_manager import TicketManager
from odoo.batch_ticket_manager import BatchTicketManager
from odoo.retrieve_ticket import retrieve_ticket
from odoo.retrieve_tickets_batch import retrieve_tickets_batch, list_projects, list_stages
from core.utils import setup_logging

def load_config(config_file="config.json"):
    """Charge le fichier de configuration"""
    try:
        with open(config_file, 'r') as f:
            return json.load(f)
    except Exception as e:
        print(f"Erreur lors du chargement du fichier de configuration: {e}")
        return {}

def exemple_extraction_ticket_unique():
    """Exemple d'extraction d'un ticket unique"""
    print("\n=== Exemple d'extraction d'un ticket unique ===\n")
    
    # Code du ticket à extraire
    ticket_code = "TS-1234"  # Remplacer par un code de ticket réel
    
    # Appel de la fonction d'extraction
    result = retrieve_ticket(
        ticket_code=ticket_code,
        output=None,  # Utiliser le répertoire par défaut
        config_file="config.json",
        verbose=True
    )
    
    if result:
        print(f"Extraction réussie! Données sauvegardées dans: {result}")
    else:
        print("L'extraction a échoué. Vérifiez les logs pour plus de détails.")

def exemple_extraction_par_lot():
    """Exemple d'extraction d'un lot de tickets par projet"""
    print("\n=== Exemple d'extraction d'un lot de tickets ===\n")
    
    # ID du projet (à remplacer par un ID réel)
    project_id = 1
    
    # Critères de recherche
    domain = [
        ["project_id", "=", project_id],
        ["stage_id", "in", [1, 2, 3]]  # Tickets dans les étapes 1, 2 ou 3
    ]
    
    # Appel de la fonction d'extraction par lot
    result = retrieve_tickets_batch(
        domain=domain,
        limit=10,
        offset=0,
        output=None,  # Utiliser le répertoire par défaut
        config_file="config.json",
        verbose=True,
        skip_existing=True
    )
    
    if result and result.get("status") != "error":
        print(f"Extraction réussie! {result.get('processed')} tickets traités.")
        print(f"Données sauvegardées dans: {result.get('batch_dir')}")
    else:
        print("L'extraction a échoué. Vérifiez les logs pour plus de détails.")

def exemple_lister_projets():
    """Exemple pour lister les projets disponibles"""
    print("\n=== Liste des projets disponibles ===\n")
    
    projects = list_projects("config.json")
    
    if projects:
        print(f"{len(projects)} projets trouvés:")
        for project in projects:
            print(f"  - ID: {project['id']}, Nom: {project['name']}")
    else:
        print("Aucun projet trouvé ou erreur lors de la récupération.")

def exemple_lister_etapes():
    """Exemple pour lister les étapes disponibles"""
    print("\n=== Liste des étapes disponibles ===\n")
    
    stages = list_stages("config.json")
    
    if stages:
        print(f"{len(stages)} étapes trouvées:")
        for stage in stages:
            print(f"  - ID: {stage['id']}, Nom: {stage['name']}")
    else:
        print("Aucune étape trouvée ou erreur lors de la récupération.")

def exemple_api_directe():
    """Exemple d'utilisation directe des classes d'API"""
    print("\n=== Exemple d'utilisation directe de l'API ===\n")
    
    config = load_config()
    odoo_config = config.get("odoo", {})
    
    if not all([odoo_config.get(k) for k in ["url", "db", "username", "api_key"]]):
        print("Configuration Odoo incomplète.")
        return
    
    # Initialiser les gestionnaires
    auth_manager = AuthManager(
        url=odoo_config.get("url"),
        db=odoo_config.get("db"),
        username=odoo_config.get("username"),
        api_key=odoo_config.get("api_key")
    )
    
    if not auth_manager.login():
        print("Échec de l'authentification à Odoo.")
        return
    
    # Exemple d'utilisation de TicketManager
    ticket_manager = TicketManager(auth_manager)
    
    # Rechercher un ticket par son code
    ticket_code = "TS-1234"  # Remplacer par un code de ticket réel
    ticket_data = ticket_manager.get_ticket_by_code(ticket_code)
    
    if ticket_data:
        print(f"Ticket trouvé: {ticket_data.get('name')}")
        
        # Afficher quelques informations
        print(f"  - Projet: {ticket_data.get('project_id_name')}")
        print(f"  - Statut: {ticket_data.get('stage_id_name')}")
        print(f"  - Assigné à: {ticket_data.get('user_id_name')}")
    else:
        print(f"Ticket {ticket_code} non trouvé.")
    
    # Exemple d'utilisation de BatchTicketManager
    batch_manager = BatchTicketManager(ticket_manager)
    
    # Compter les tickets ouverts
    open_tickets_domain = [["stage_id.name", "ilike", "ouvert"]]
    open_count = batch_manager.get_ticket_count(open_tickets_domain)
    print(f"\nNombre de tickets ouverts: {open_count}")

if __name__ == "__main__":
    # Configurer la journalisation
    setup_logging(logging.INFO)
    
    # Exécuter les exemples
    print("\n" + "="*60)
    print("EXEMPLES D'UTILISATION DU MODULE ODOO")
    print("="*60)
    
    # Lister les projets et étapes
    exemple_lister_projets()
    exemple_lister_etapes()
    
    # Extraire un ticket unique
    # exemple_extraction_ticket_unique()
    
    # Extraire un lot de tickets
    # exemple_extraction_par_lot()
    
    # Utiliser l'API directement
    # exemple_api_directe()
    
    print("\n" + "="*60)
    print("FIN DES EXEMPLES")
    print("="*60 + "\n") 