# app/api/v1/shop/content_pages.py
"""
Shop Content Pages API (Public)

Public endpoints for retrieving content pages in shop frontend.
No authentication required.
"""

import logging

from fastapi import APIRouter, Depends, Request
from pydantic import BaseModel
from sqlalchemy.orm import Session

from app.core.database import get_db
from app.services.content_page_service import content_page_service

router = APIRouter()
logger = logging.getLogger(__name__)


# ============================================================================
# RESPONSE SCHEMAS
# ============================================================================


class PublicContentPageResponse(BaseModel):
    """Public content page response (no internal IDs)."""

    slug: str
    title: str
    content: str
    content_format: str
    meta_description: str | None
    meta_keywords: str | None
    published_at: str | None


class ContentPageListItem(BaseModel):
    """Content page list item for navigation."""

    slug: str
    title: str
    show_in_footer: bool
    show_in_header: bool
    display_order: int


# ============================================================================
# PUBLIC ENDPOINTS
# ============================================================================


@router.get("/navigation", response_model=list[ContentPageListItem])
def get_navigation_pages(request: Request, db: Session = Depends(get_db)):
    """
    Get list of content pages for navigation (footer/header).

    Uses vendor from request.state (set by middleware).
    Returns vendor overrides + platform defaults.
    """
    vendor = getattr(request.state, "vendor", None)
    vendor_id = vendor.id if vendor else None

    # Get all published pages for this vendor
    pages = content_page_service.list_pages_for_vendor(
        db, vendor_id=vendor_id, include_unpublished=False
    )

    return [
        {
            "slug": page.slug,
            "title": page.title,
            "show_in_footer": page.show_in_footer,
            "show_in_header": page.show_in_header,
            "display_order": page.display_order,
        }
        for page in pages
    ]


@router.get("/{slug}", response_model=PublicContentPageResponse)
def get_content_page(slug: str, request: Request, db: Session = Depends(get_db)):
    """
    Get a specific content page by slug.

    Uses vendor from request.state (set by middleware).
    Returns vendor override if exists, otherwise platform default.
    """
    vendor = getattr(request.state, "vendor", None)
    vendor_id = vendor.id if vendor else None

    page = content_page_service.get_page_for_vendor_or_raise(
        db,
        slug=slug,
        vendor_id=vendor_id,
        include_unpublished=False,  # Only show published pages
    )

    return {
        "slug": page.slug,
        "title": page.title,
        "content": page.content,
        "content_format": page.content_format,
        "meta_description": page.meta_description,
        "meta_keywords": page.meta_keywords,
        "published_at": page.published_at.isoformat() if page.published_at else None,
    }
