from fastapi import APIRouter, Depends, status
from sqlalchemy.orm import Session
from typing import List, Optional
import uuid
from app.api import deps
from app.db.session import get_db
from app.schemas.order import OrderCreate, OrderResponse
from app.services.order import order_service
from app.models.user import User

router = APIRouter()

@router.post("", response_model=OrderResponse, status_code=status.HTTP_201_CREATED)
def create_order(
    order_in: OrderCreate,
    db: Session = Depends(get_db),
    # Token opsional: user tidak wajib login untuk bisa beli
    current_user: Optional[User] = Depends(deps.get_current_user)
):
    """Checkout a new jewelry order. Returns transaction details and a custom WhatsApp checkout link."""
    user_id = str(current_user.id) if current_user else None
    
    # Konversi format list items schema pydantic ke dictionary
    items_list = [item.model_dump() for item in order_in.items]
    
    return order_service.checkout(
        db,
        customer_name=order_in.customer_name,
        customer_phone=order_in.customer_phone,
        shipping_address=order_in.shipping_address,
        items=items_list,
        user_id=user_id
    )

@router.get("/history", response_model=List[OrderResponse])
def get_order_history(
    db: Session = Depends(get_db),
    current_user: User = Depends(deps.get_current_user)
):
    """Retrieve transaction history belonging to the logged-in user."""
    return order_service.get_user_order_history(db, user_id=str(current_user.id))

@router.get("/{order_id}", response_model=OrderResponse)
def get_order_details(
    order_id: uuid.UUID,
    db: Session = Depends(get_db)
):
    """Retrieve detailed invoices for a specific order transaction ID (public)."""
    return order_service.get_order_by_id(db, order_id=str(order_id))
