"""Routes pour l'interface d'administration (backoffice)."""

from flask import Blueprint, jsonify, request
from flask_jwt_extended import jwt_required, get_jwt_identity

from models.user import User
from models.story import Story
from services.ai_logging_service import AILoggingService

admin_bp = Blueprint('admin', __name__, url_prefix='/api/admin')


def require_admin():
    """Décorateur pour vérifier les droits admin."""
    user_id = get_jwt_identity()
    user = User.query.get(user_id)
    
    if not user or not user.is_admin:
        return jsonify({'message': 'Accès réservé aux administrateurs'}), 403
    
    return None


@admin_bp.route('/stories', methods=['GET'])
@jwt_required()
def list_all_stories():
    """Liste toutes les histoires (pour admin)."""
    admin_check = require_admin()
    if admin_check:
        return admin_check
    
    stories = Story.query.order_by(Story.created_at.desc()).all()
    
    return jsonify({
        'stories': [{
            'id': story.id,
            'title': story.title,
            'username': story.user.username,
            'genre': story.genre,
            'turn_count': story.turn_count,
            'created_at': story.created_at.isoformat()
        } for story in stories]
    }), 200


@admin_bp.route('/stories/<story_id>/logs', methods=['GET'])
@jwt_required()
def get_story_logs(story_id: str):
    """Récupère tous les logs IA d'une histoire."""
    admin_check = require_admin()
    if admin_check:
        return admin_check
    
    story = Story.query.get(story_id)
    if not story:
        return jsonify({'message': 'Histoire non trouvée'}), 404
    
    logs = AILoggingService.get_logs_for_story(story_id)
    
    return jsonify({
        'story': {
            'id': story.id,
            'title': story.title,
            'username': story.user.username,
            'turn_count': story.turn_count
        },
        'logs': [log.to_dict() for log in logs]
    }), 200


@admin_bp.route('/logs/stats', methods=['GET'])
@jwt_required()
def get_ai_stats():
    """Récupère des statistiques sur les appels IA."""
    admin_check = require_admin()
    if admin_check:
        return admin_check
    
    from models.ai_log import AILog
    from sqlalchemy import func
    
    # Nombre total d'appels par type
    stats_by_type = AILog.query.with_entities(
        AILog.call_type,
        func.count(AILog.id).label('count'),
        func.sum(AILog.total_tokens).label('total_tokens'),
        func.avg(AILog.response_time_ms).label('avg_response_time')
    ).group_by(AILog.call_type).all()
    
    # Taux de succès
    total_calls = AILog.query.count()
    successful_calls = AILog.query.filter_by(success=True).count()
    
    return jsonify({
        'total_calls': total_calls,
        'successful_calls': successful_calls,
        'success_rate': (successful_calls / total_calls * 100) if total_calls > 0 else 0,
        'by_type': [{
            'call_type': stat[0],
            'count': stat[1],
            'total_tokens': stat[2] or 0,
            'avg_response_time_ms': int(stat[3]) if stat[3] else 0
        } for stat in stats_by_type]
    }), 200

