from fastapi import APIRouter, Depends
from fastapi.responses import JSONResponse
from pydantic import BaseModel
from typing import List, Optional
import traceback

from utils.turnstile_helper import verify_turnstile
from model.import_model import ImportModel

router = APIRouter()


class ImportOrderRow(BaseModel):
    orderId: Optional[str] = ""
    productId: Optional[str] = None
    productName: Optional[str] = None
    customer: str
    items: str
    address: str
    phone: Optional[str] = None
    email: Optional[str] = None

    style: Optional[str] = None
    quantity: Optional[float] = 0
    price: Optional[float] = 0
    shipping: Optional[float] = 0
    tax: Optional[float] = 0
    color: Optional[str] = None
    size: Optional[str] = None
    design: Optional[str] = None
    status: Optional[str] = "Unpaid"


class ImportRequest(BaseModel):
    fileName: str
    fileSize: int
    rows: List[ImportOrderRow]
    id_khach_hang: Optional[str] = None


@router.post("/orders", dependencies=[Depends(verify_turnstile)])
async def import_orders_endpoint(payload: ImportRequest):
    try:
        result = ImportModel.process_import(
            file_name=payload.fileName,
            file_size=payload.fileSize,
            rows=[row.model_dump() for row in payload.rows],
            id_khach_hang=payload.id_khach_hang,
        )

        return {
            "success": True,
            "data": result,
            "message": (
                f"Import hoàn tất: "
                f"{result['validRows']} dòng hợp lệ, "
                f"{result['insertedOrderCount']} đơn đã được ghi vào hệ thống."
            ),
        }

    except Exception as e:
        error_trace = traceback.format_exc()

        print("========== IMPORT API ERROR ==========")
        print(f"Error type: {type(e).__name__}")
        print(f"Error detail: {str(e)}")
        print("Traceback:\n", error_trace)
        print("======================================")

        return JSONResponse(
            status_code=500,
            content={
                "success": False,
                "message": "Import API bị lỗi",
                "error_type": type(e).__name__,
                "error_detail": str(e),
                "traceback": error_trace,
                "payload": payload.model_dump(),
            }
        )