#!/usr/bin/env python3
import os
import sys
import json
import logging
import argparse
from datetime import datetime
from utils.auth_manager import AuthManager
from utils.ticket_manager import TicketManager
from utils.utils import setup_logging, log_separator

def parse_arguments():
    parser = argparse.ArgumentParser(description="Récupère un ticket Odoo par son code et extrait ses données.")
    parser.add_argument("ticket_code", help="Code du ticket à extraire")
    parser.add_argument("--output", "-o", help="Répertoire de sortie", default=None)
    parser.add_argument("--config", "-c", help="Fichier de configuration", default="config.json")
    parser.add_argument("--verbose", "-v", action="store_true", help="Mode verbeux")
    return parser.parse_args()

def load_config(config_file):
    try:
        with open(config_file, 'r') as f:
            return json.load(f)
    except Exception as e:
        logging.error(f"Erreur lors du chargement du fichier de configuration: {e}")
        sys.exit(1)

def main():
    args = parse_arguments()
    config = load_config(args.config)
    
    # Configurer la journalisation
    log_level = logging.DEBUG if args.verbose else logging.INFO
    setup_logging(log_level, "retrieve_ticket.log")
    
    # Extraire les informations de connexion
    odoo_config = config.get("odoo", {})
    url = odoo_config.get("url")
    db = odoo_config.get("db")
    username = odoo_config.get("username")
    api_key = odoo_config.get("api_key")
    
    if not all([url, db, username, api_key]):
        logging.error("Informations de connexion Odoo manquantes dans le fichier de configuration")
        sys.exit(1)
    
    # Définir le répertoire de sortie
    output_dir = args.output or os.path.join(config.get("output_dir", "output"), f"ticket_{args.ticket_code}")
    
    # Créer le répertoire de sortie spécifique au ticket
    timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
    ticket_dir = os.path.join(output_dir, f"{args.ticket_code}_{timestamp}")
    os.makedirs(ticket_dir, exist_ok=True)
    
    logging.info(f"Extraction du ticket {args.ticket_code}")
    log_separator()
    
    try:
        # Initialiser les gestionnaires
        auth_manager = AuthManager(
            url=url,
            db=db,
            username=username,
            api_key=api_key
        )
        
        if not auth_manager.login():
            logging.error("Échec de l'authentification à Odoo")
            sys.exit(1)
        
        # Extraire les données du ticket
        ticket_manager = TicketManager(auth_manager)
        result = ticket_manager.extract_ticket_data(args.ticket_code, ticket_dir)
        
        if not result:
            logging.error(f"Échec de l'extraction du ticket {args.ticket_code}")
            sys.exit(1)
        
        # Afficher le résumé
        log_separator()
        logging.info(f"Extraction terminée avec succès")
        logging.info(f"Ticket: {args.ticket_code}")
        logging.info(f"Répertoire: {ticket_dir}")
        logging.info(f"Messages traités: {result.get('messages_count', 0)}")
        logging.info(f"Pièces jointes: {result.get('attachments_count', 0)}")
        log_separator()
        
        # Générer un rapport de fin
        summary = {
            "timestamp": timestamp,
            "ticket_code": args.ticket_code,
            "output_directory": ticket_dir,
            "message_count": result.get("messages_count", 0),
            "attachment_count": result.get("attachments_count", 0),
            "files_created": [
                os.path.basename(result.get("ticket_info", "")),
                os.path.basename(result.get("ticket_summary", "")),
                os.path.basename(result.get("messages_file", "")),
                os.path.basename(result.get("ticket_data_file", ""))
            ]
        }
        
        summary_path = os.path.join(ticket_dir, "extraction_summary.json")
        with open(summary_path, 'w', encoding='utf-8') as f:
            json.dump(summary, f, indent=2, ensure_ascii=False)
            
        print(f"\nExtraction du ticket {args.ticket_code} terminée avec succès.")
        print(f"Les données ont été sauvegardées dans: {ticket_dir}")
        
    except Exception as e:
        logging.exception(f"Une erreur est survenue: {e}")
        sys.exit(1)

if __name__ == "__main__":
    main() 