import logging
from typing import List

from fastapi import FastAPI, File, UploadFile, HTTPException
from pydantic import BaseModel

# Настройка логгера
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)

app = FastAPI(title="RMSER OCR Service")

# DTO ответа (должно совпадать с Go-структурой RecognizedItem)
class RecognizedItem(BaseModel):
    raw_name: str
    amount: float
    price: float
    sum: float

class RecognitionResult(BaseModel):
    items: List[RecognizedItem]

@app.get("/health")
def health_check():
    return {"status": "ok"}

@app.post("/recognize", response_model=RecognitionResult)
async def recognize_receipt(image: UploadFile = File(...)):
    """
    Принимает изображение, 'распознает' его (пока заглушка)
    и возвращает список позиций.
    """
    logger.info(f"Received file: {image.filename}, content_type: {image.content_type}")

    if not image.content_type.startswith("image/"):
        raise HTTPException(status_code=400, detail="File must be an image")

    # Читаем байты (имитация обработки)
    content = await image.read()
    logger.info(f"Read {len(content)} bytes")

    # --- ЗАГЛУШКА (MOCK) ---
    # Здесь в будущем будет вызов нейросети/Tesseract.
    # Пока возвращаем хардкод, чтобы проверить интеграцию с Go.
    
    mock_items = [
        RecognizedItem(
            raw_name="Молоко Петмол 3.2", # Это мы потом свяжем с реальным молоком
            amount=5.0,
            price=100.0,
            sum=500.0
        ),
        RecognizedItem(
            raw_name="Хлеб Бородинский", # Этого, возможно, нет в базе (проверим обработку неизвестных)
            amount=2.0,
            price=45.50,
            sum=91.0
        ),
        RecognizedItem(
            raw_name="НЕИЗВЕСТНЫЙ ТОВАР 123", 
            amount=1.0,
            price=1000.0,
            sum=1000.0
        )
    ]
    # -----------------------

    return RecognitionResult(items=mock_items)

if __name__ == "__main__":
    import uvicorn
    # Запуск: python main.py
    uvicorn.run(app, host="0.0.0.0", port=5000)