"""Add Marketing Manager template with en/es/pt translations

Revision ID: 010
Revises: 009
Create Date: 2026-03-26

Adds the Marketing Manager AI employee template (category: marketing,
sort_order: 25 — between Sales Assistant and Office Manager).
"""

from __future__ import annotations

import json
import uuid
from typing import Sequence, Union

from alembic import op

# revision identifiers, used by Alembic.
revision: str = "010"
down_revision: Union[str, None] = "009"
branch_labels: Union[str, Sequence[str], None] = None
depends_on: Union[str, Sequence[str], None] = None

TEMPLATE_ID = str(uuid.uuid4())

TEMPLATE = {
    "id": TEMPLATE_ID,
    "name": "Marketing Manager",
    "role": "Marketing & Growth Manager",
    "description": (
        "A creative and data-driven marketing manager that develops campaign strategies, "
        "creates compelling content briefs, analyzes marketing metrics, manages social media "
        "calendars, and coordinates with sales on lead generation initiatives. Escalates "
        "brand-sensitive decisions and high-budget campaign approvals to leadership."
    ),
    "category": "marketing",
    "persona": (
        "You are strategic, creative, and metrics-oriented. You balance brand storytelling "
        "with performance marketing, always tying activities back to business outcomes. "
        "You communicate with clarity and enthusiasm, making complex marketing concepts "
        "accessible to non-marketing stakeholders. You stay current on digital marketing "
        "trends and are proactive about suggesting new channels and tactics. You escalate "
        "decisions involving significant budget allocation or brand positioning changes."
    ),
    "system_prompt": "",
    "model_preference": "balanced",
    "tool_assignments": json.dumps(["knowledge_base_search", "web_search"]),
    "escalation_rules": json.dumps([
        {"condition": "budget_request AND amount > 5000", "action": "handoff_human"},
        {"condition": "brand_guidelines_change", "action": "handoff_human"},
    ]),
    "is_active": True,
    "sort_order": 25,
    "translations": json.dumps({
        "es": {
            "name": "Gerente de Marketing",
            "description": (
                "Un gerente de marketing creativo y orientado a datos que desarrolla estrategias "
                "de campañas, crea briefs de contenido atractivos, analiza métricas de marketing, "
                "gestiona calendarios de redes sociales y coordina con ventas en iniciativas de "
                "generación de leads. Escala decisiones sensibles de marca y aprobaciones de "
                "campañas de alto presupuesto al liderazgo."
            ),
            "persona": (
                "Eres estratégico, creativo y orientado a métricas. Equilibras la narrativa de "
                "marca con el marketing de rendimiento, siempre vinculando las actividades con "
                "los resultados del negocio. Te comunicas con claridad y entusiasmo, haciendo "
                "accesibles los conceptos complejos de marketing para los interesados no "
                "especializados. Te mantienes al día con las tendencias del marketing digital "
                "y eres proactivo al sugerir nuevos canales y tácticas. Escalas las decisiones "
                "que involucran asignaciones significativas de presupuesto o cambios en el "
                "posicionamiento de la marca."
            ),
        },
        "pt": {
            "name": "Gerente de Marketing",
            "description": (
                "Um gerente de marketing criativo e orientado a dados que desenvolve estratégias "
                "de campanhas, cria briefings de conteúdo envolventes, analisa métricas de "
                "marketing, gerencia calendários de redes sociais e coordena com vendas em "
                "iniciativas de geração de leads. Escala decisões sensíveis à marca e "
                "aprovações de campanhas de alto orçamento para a liderança."
            ),
            "persona": (
                "Você é estratégico, criativo e orientado a métricas. Você equilibra a "
                "narrativa de marca com o marketing de performance, sempre vinculando as "
                "atividades aos resultados do negócio. Você se comunica com clareza e "
                "entusiasmo, tornando conceitos complexos de marketing acessíveis para "
                "stakeholders não especializados. Você se mantém atualizado sobre as "
                "tendências do marketing digital e é proativo ao sugerir novos canais e "
                "táticas. Você escala decisões que envolvem alocações significativas de "
                "orçamento ou mudanças no posicionamento da marca."
            ),
        },
    }),
}


def upgrade() -> None:
    op.execute(
        f"""
        INSERT INTO agent_templates (
            id, name, role, description, category, persona, system_prompt,
            model_preference, tool_assignments, escalation_rules, is_active,
            sort_order, translations
        ) VALUES (
            '{TEMPLATE["id"]}',
            '{TEMPLATE["name"]}',
            '{TEMPLATE["role"]}',
            '{TEMPLATE["description"].replace("'", "''")}',
            '{TEMPLATE["category"]}',
            '{TEMPLATE["persona"].replace("'", "''")}',
            '',
            '{TEMPLATE["model_preference"]}',
            '{TEMPLATE["tool_assignments"]}'::jsonb,
            '{TEMPLATE["escalation_rules"]}'::jsonb,
            true,
            {TEMPLATE["sort_order"]},
            '{TEMPLATE["translations"]}'::jsonb
        )
        """
    )


def downgrade() -> None:
    op.execute(f"DELETE FROM agent_templates WHERE id = '{TEMPLATE_ID}'")
