"""
Roteador Público: Link de Agendamento do Cliente (/b/{slug})
Seguindo o Princípio 1 do Navalhe: Zero atrito, sem app, sem senha.
"""
from fastapi import APIRouter, Request, HTTPException
from fastapi.templating import Jinja2Templates
import os
from datetime import datetime
from app.database import get_db

TEMPLATES_DIR = os.path.join(os.path.dirname(os.path.dirname(__file__)), "templates")
templates = Jinja2Templates(directory=TEMPLATES_DIR)

router = APIRouter(prefix="/b", tags=["Público"])

@router.get("/{slug}")
def client_booking_page(slug: str, request: Request):
    with get_db() as conn:
        cursor = conn.cursor()
        
        # 1. Buscar Barbearia
        cursor.execute("SELECT * FROM barbershops WHERE slug = ?", (slug,))
        shop = cursor.fetchone()
        if not shop:
            raise HTTPException(status_code=404, detail="Barbearia não encontrada")

        shop_dict = dict(shop)

        # 2. Buscar Serviços Ativos
        cursor.execute("SELECT * FROM services WHERE barbershop_id = ? AND is_active = 1 ORDER BY price ASC", (shop_dict["id"],))
        services = [dict(r) for r in cursor.fetchall()]

        # 3. Buscar Barbeiros Ativos
        cursor.execute("SELECT * FROM barbers WHERE barbershop_id = ? AND is_active = 1 ORDER BY name ASC", (shop_dict["id"],))
        barbers = [dict(r) for r in cursor.fetchall()]

        return templates.TemplateResponse(
            request=request,
            name="public/booking.html",
            context={
                "shop": shop_dict,
                "services": services,
                "barbers": barbers
            }
        )

@router.get("/{slug}/sucesso/{appointment_id}")
def client_success_page(slug: str, appointment_id: int, request: Request):
    with get_db() as conn:
        cursor = conn.cursor()

        # 1. Buscar Barbearia
        cursor.execute("SELECT * FROM barbershops WHERE slug = ?", (slug,))
        shop = cursor.fetchone()
        if not shop:
            raise HTTPException(status_code=404, detail="Barbearia não encontrada")

        shop_dict = dict(shop)

        # 2. Buscar Agendamento
        cursor.execute("""
        SELECT a.*, s.name as service_name, b.name as barber_name,
               c.name as client_name, c.phone as client_phone
        FROM appointments a
        JOIN services s ON a.service_id = s.id
        JOIN barbers b ON a.barber_id = b.id
        JOIN clients c ON a.client_id = c.id
        WHERE a.id = ? AND a.barbershop_id = ?
        """, (appointment_id, shop_dict["id"]))
        appt = cursor.fetchone()
        if not appt:
            raise HTTPException(status_code=404, detail="Agendamento não encontrado")

        appt_dict = dict(appt)
        
        # Formatar Data DD/MM/AAAA
        parts = appt_dict["appointment_date"].split("-")
        appt_dict["formatted_date"] = f"{parts[2]}/{parts[1]}/{parts[0]}"

        # Texto padrão para enviar no WhatsApp da barbearia
        zap_text = f"Olá! Acabei de agendar pelo link no horário de {appt_dict['start_time']}h no dia {appt_dict['formatted_date']} com {appt_dict['barber_name']} ({appt_dict['service_name']}). Meu nome é {appt_dict['client_name']}!"

        return templates.TemplateResponse(
            request=request,
            name="public/success.html",
            context={
                "shop": shop_dict,
                "appt": appt_dict,
                "zap_text": zap_text
            }
        )
