from pydantic import BaseModel, Field
from fastapi import File, HTTPException,UploadFile
import os
import shutil
import uuid
import cv2

from src.validators.validateidentitycard import extract_text, process_image
class ImagePath(BaseModel):
    image_path: str

TEMP_IMAGE_DIR = "temp_images"
os.makedirs(TEMP_IMAGE_DIR, exist_ok=True)

async def process_image_endpoint(file: UploadFile = File(...)):
    """
    Endpoint para procesar una imagen enviada directamente y detectar cédulas de identidad.
    """
    if not file.content_type.startswith("image/"):
        raise HTTPException(status_code=400, detail="El archivo debe ser una imagen.")

    # Generar nombre único para la imagen temporal
    filename = f"{uuid.uuid4().hex}_{file.filename}"
    image_path = os.path.join(TEMP_IMAGE_DIR, filename)

    # Guardar la imagen en el sistema de archivos temporalmente
    with open(image_path, "wb") as buffer:
        shutil.copyfileobj(file.file, buffer)

    try:
        # Procesar imagen
        result = process_image(image_path)
        return result
    except Exception as e:
        raise HTTPException(status_code=500, detail=str(e))
    finally:
        # Eliminar la imagen temporal después del procesamiento
        if os.path.exists(image_path):
            os.remove(image_path)

def extract_text_endpoint(data: ImagePath):
    """
    Endpoint para extraer texto de una imagen completa utilizando OCR.
    """
    image_path = data.image_path
    if not os.path.exists(image_path):
        raise HTTPException(status_code=404, detail="La imagen no existe en la ruta proporcionada.")
    image = cv2.imread(image_path)
    text = extract_text(image)
    return {"extracted_text": text}
