from flask import Flask, request, jsonify
import requests
import fitz  # PyMuPDF
from io import BytesIO
import base64

app = Flask(__name__)

API_TOKEN = "FactorX2025CV"

@app.route('/leer_cv', methods=['POST'])
def leer_cv():
    # Validación del token
    auth_header = request.headers.get("Authorization")
    if not auth_header or auth_header != f"Bearer {API_TOKEN}":
        return jsonify({"error": "No autorizado"}), 401

    # Validación del cuerpo JSON
    data = request.get_json()
    if not data or 'pdf_url' not in data:
        return jsonify({'error': 'Falta el campo pdf_url'}), 400

    pdf_url = data['pdf_url']

    # Descargar el PDF
    try:
        response = requests.get(pdf_url)
        response.raise_for_status()
    except Exception as e:
        return jsonify({'error': f'No se pudo descargar el PDF: {str(e)}'}), 400

    try:
        doc = fitz.open(stream=BytesIO(response.content), filetype="pdf")
        texto = ""
        imagen_base64 = None

        # Extraer texto de todas las páginas
        for page in doc:
            texto += page.get_text()

        # Buscar imagen en la primera página
        primera_pagina = doc[0]
        images = primera_pagina.get_images(full=True)

        if images:
            xref = images[0][0]  # Tomamos la primera imagen
            base_image = doc.extract_image(xref)
            image_bytes = base_image["image"]
            imagen_base64 = base64.b64encode(image_bytes).decode("utf-8")
        else:
            imagen_base64 = None

        return jsonify({
            'texto': texto,
            'foto_base64': imagen_base64
        })
    except Exception as e:
        return jsonify({'error': f'No se pudo leer el PDF: {str(e)}'}), 500

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5004, debug=True)
