# app/api/v1/vendor/customers.py
"""
Vendor customer management endpoints.

Vendor Context: Uses token_vendor_id from JWT token (authenticated vendor API pattern).
The get_current_vendor_api dependency guarantees token_vendor_id is present.
"""

import logging

from fastapi import APIRouter, Depends, Query
from sqlalchemy.orm import Session

from app.api.deps import get_current_vendor_api
from app.core.database import get_db
from app.services.vendor_service import vendor_service
from models.database.user import User
from models.schema.customer import (
    CustomerDetailResponse,
    CustomerMessageResponse,
    CustomerOrdersResponse,
    CustomerStatisticsResponse,
    CustomerUpdate,
    VendorCustomerListResponse,
)

router = APIRouter(prefix="/customers")
logger = logging.getLogger(__name__)


@router.get("", response_model=VendorCustomerListResponse)
def get_vendor_customers(
    skip: int = Query(0, ge=0),
    limit: int = Query(100, ge=1, le=1000),
    search: str | None = Query(None),
    is_active: bool | None = Query(None),
    current_user: User = Depends(get_current_vendor_api),
    db: Session = Depends(get_db),
):
    """
    Get all customers for this vendor.

    TODO: Implement in Slice 4
    - Query customers filtered by vendor_id
    - Support search by name/email
    - Support filtering by active status
    - Return paginated results
    """
    vendor = vendor_service.get_vendor_by_id(db, current_user.token_vendor_id)  # noqa: F841
    return VendorCustomerListResponse(
        customers=[],
        total=0,
        skip=skip,
        limit=limit,
        message="Customer management coming in Slice 4",
    )


@router.get("/{customer_id}", response_model=CustomerDetailResponse)
def get_customer_details(
    customer_id: int,
    current_user: User = Depends(get_current_vendor_api),
    db: Session = Depends(get_db),
):
    """
    Get detailed customer information.

    TODO: Implement in Slice 4
    - Get customer by ID
    - Verify customer belongs to vendor
    - Include order history
    - Include total spent, etc.
    """
    vendor = vendor_service.get_vendor_by_id(db, current_user.token_vendor_id)  # noqa: F841
    return CustomerDetailResponse(message="Customer details coming in Slice 4")


@router.get("/{customer_id}/orders", response_model=CustomerOrdersResponse)
def get_customer_orders(
    customer_id: int,
    current_user: User = Depends(get_current_vendor_api),
    db: Session = Depends(get_db),
):
    """
    Get order history for a specific customer.

    TODO: Implement in Slice 5
    - Get all orders for customer
    - Filter by vendor_id
    - Return order details
    """
    vendor = vendor_service.get_vendor_by_id(db, current_user.token_vendor_id)  # noqa: F841
    return CustomerOrdersResponse(
        orders=[], message="Customer orders coming in Slice 5"
    )


@router.put("/{customer_id}", response_model=CustomerMessageResponse)
def update_customer(
    customer_id: int,
    customer_data: CustomerUpdate,
    current_user: User = Depends(get_current_vendor_api),
    db: Session = Depends(get_db),
):
    """
    Update customer information.

    TODO: Implement in Slice 4
    - Update customer details
    - Verify customer belongs to vendor
    - Update customer preferences
    """
    vendor = vendor_service.get_vendor_by_id(db, current_user.token_vendor_id)  # noqa: F841
    return CustomerMessageResponse(message="Customer update coming in Slice 4")


@router.put("/{customer_id}/status", response_model=CustomerMessageResponse)
def toggle_customer_status(
    customer_id: int,
    current_user: User = Depends(get_current_vendor_api),
    db: Session = Depends(get_db),
):
    """
    Activate/deactivate customer account.

    TODO: Implement in Slice 4
    - Toggle customer is_active status
    - Verify customer belongs to vendor
    - Log the change
    """
    vendor = vendor_service.get_vendor_by_id(db, current_user.token_vendor_id)  # noqa: F841
    return CustomerMessageResponse(message="Customer status toggle coming in Slice 4")


@router.get("/{customer_id}/stats", response_model=CustomerStatisticsResponse)
def get_customer_statistics(
    customer_id: int,
    current_user: User = Depends(get_current_vendor_api),
    db: Session = Depends(get_db),
):
    """
    Get customer statistics and metrics.

    TODO: Implement in Slice 4
    - Total orders
    - Total spent
    - Average order value
    - Last order date
    """
    vendor = vendor_service.get_vendor_by_id(db, current_user.token_vendor_id)  # noqa: F841
    return CustomerStatisticsResponse(
        total_orders=0,
        total_spent=0.0,
        average_order_value=0.0,
        last_order_date=None,
        message="Customer statistics coming in Slice 4",
    )
