<?php
header('Content-Type: application/json');
require_once __DIR__ . '/../config.php';
require_once __DIR__ . '/../db.php';
require_once __DIR__ . '/../auth.php';
dm_require_login();
dm_check_module_access('avi');
dm_csrf_verify();

$input = json_decode(file_get_contents('php://input'), true);

$question      = trim($input['question']        ?? '');
$client_ctx    = trim($input['client_ctx']      ?? '');
$client_name   = trim($input['client_name']     ?? '');
$client_url    = trim($input['client_url']      ?? '');
$client_ind    = trim($input['client_industry'] ?? '');
$section       = trim($input['section']         ?? '');
$brand_ctx     = trim($input['brand_ctx']       ?? '');

if (empty($question)) {
    echo json_encode(['response' => 'Escribe una pregunta para AVI.']);
    exit;
}

$api_key = defined('CLAUDE_API_KEY') ? CLAUDE_API_KEY : '';
if (empty($api_key)) {
    echo json_encode(['response' => 'Configura tu Claude API Key en ⚙ APIs para activar AVI.']);
    exit;
}

if (!empty($client_name)) {
    $client_block = "CLIENTE ACTIVO: {$client_name}
Industria: {$client_ind}
Sitio web: {$client_url}

CONTEXTO DEL NEGOCIO:
{$client_ctx}"
    . (!empty($brand_ctx) ? "\n\nIDENTIDAD DE MARCA:\n{$brand_ctx}" : '')
    . "\n\nINSTRUCCIÓN CRÍTICA: Todo lo que generes — artículos, copies, keywords, estrategias — debe ser específicamente para {$client_name} ({$client_ind}). NO generes contenido genérico ni de DIMARK. Si el contexto no tiene suficiente info, pídela antes de generar. Respeta siempre la identidad de marca definida arriba.";
} else {
    $client_block = "No hay cliente seleccionado. Trabajas como asistente interno de DIMARK.";
}

$section_ctx = [
    'meta'   => "Sección: META ADS — eres experto en Meta Ads con dominio total de copies, segmentación, formatos, presupuestos, Facebook e Instagram Ads, ROAS y optimización de campañas.",
    'google' => "Sección: GOOGLE ADS — eres experto en Google Ads con dominio de keywords, RSA, pujas inteligentes, quality score, Search, Display, Performance Max y Shopping.",
    'seo'    => "Sección: SEO — eres experto en SEO con dominio de artículos optimizados, meta tags, schema markup, velocidad web, Core Web Vitals, backlinks y arquitectura de contenido.",
    'web'    => "Sección: SITIOS WEB — eres experto en desarrollo web con dominio de WordPress, Shopify, plugins, UX/UI, optimización de conversión y velocidad de carga.",
    'analytics' => "Sección: ANALYTICS (GA4) — eres experto en Google Analytics 4 y atribución cross-canal. Dominas sesiones, usuarios, eventos clave/conversiones, engagement, landing pages, channel grouping, fuente/medio e ingreso (e-commerce). PRINCIPIO CLAVE: trata GA4 como la VERDAD DE NEGOCIO/SITIO (qué pasa después del clic: leads, ventas, ingreso) y las plataformas de pauta (Google/Meta Ads) como la VERDAD DE GASTO/ENTREGA. Nunca asumas que reconcilian al 100% — explica las diferencias de atribución en vez de 'corregir' una con la otra. Usa GA4 para validar la CALIDAD real de las conversiones que reportan las plataformas y para recomendar dónde escalar o recortar presupuesto según resultado real.",
    'imagenes' => "Sección: IMÁGENES IA — eres experto en generación de imágenes con inteligencia artificial 2026. Dominas completamente:
- MIDJOURNEY v6.1: sintaxis /imagine, parámetros --ar, --style, --v 6.1, --q, --no. Prompts en inglés con subject, environment, lighting, style, mood, camera.
- DALL-E 3: prompts descriptivos en inglés, excelente para coherencia narrativa y texto en imagen.
- FLUX.1 (Dev/Schnell/Pro): prompts detallados estilo Midjourney sin parámetros, fotorrealismo extremo.
- IDEOGRAM 2.0: el mejor para texto en imágenes, tipografía perfecta, prompts en inglés.
- LEONARDO AI Phoenix: prompt en inglés + negative prompt, ideal para personajes y productos.
- ADOBE FIREFLY 3: imágenes comerciales sin restricciones copyright, prompt en inglés o español.
- PROMPT ENGINEERING: estructura subject→environment→lighting→style→camera→mood, negative prompts, aspect ratios por plataforma (1:1, 9:16, 16:9, 4:5).
- USO EN MARKETING: thumbnails YouTube, portadas Reel, creatividades Meta/Google Ads, fotos de producto, storyboards, fondos de marca, lifestyle shots.
Generas prompts listos para pegar en cada herramienta, en inglés cuando aplica, con la sintaxis exacta de cada una.",
    'tiktok' => "Sección: TIKTOK ADS — eres experto en TikTok for Business con dominio total de:
- CAMPAÑAS: objetivos (Traffic, Conversions, App Install, Lead Generation, Video Views), presupuesto diario vs total, pujas (oCPC, CPM, CPV).
- AUDIENCIAS: Custom Audiences, Lookalike, intereses por categoría, comportamientos de compra, retargeting de visitantes web y engagement de video.
- FORMATOS: In-Feed Ads (feed nativo), TopView (primer anuncio al abrir app), Branded Hashtag Challenge, Branded Effects, Spark Ads (boostear contenido orgánico).
- CREATIVIDADES TikTok: primeros 3 segundos críticos — pattern interrupt, hook visual + auditivo, texto on-screen, sonido trending, duración óptima 15-30s, ratio 9:16.
- MÉTRICAS: CTR (benchmark >1%), CPM (<$10 USD), View Rate (>25%), Engagement Rate (>5%), ROAS, CPA por objetivo.
- ESTRATEGIA DE CONTENIDO: pilares de contenido, calendario editorial, UGC (User Generated Content) para Spark Ads, prueba A/B de creatividades, fatiga creativa (rotar cada 7-14 días).
- OPTIMIZACIÓN: análisis de frequencia, exclusión de audiencias ya convertidas, ajuste de pujas por horario y dispositivo, scaling horizontal vs vertical.
Generas estrategias accionables, copies listos para usar y diagnósticos precisos basados en los datos reales del cliente.",
    'videos' => "Sección: VIDEOS PARA REDES SOCIALES — eres el mayor experto en viralidad 2026 para redes sociales. Conoces en profundidad:
- ALGORITMOS: TikTok For You, Instagram Reels, YouTube Shorts, Facebook Reels — cómo priorizan contenido en 2026
- VIRALIDAD: pattern interrupt, retention tactics, watch time, micro-cliffhangers, loop endings, comment bait, sound strategy
- FORMATOS VIRALES por industria: salud, música, restaurantes, moda, belleza, inmobiliaria, fitness, educación, ecommerce, tecnología, viajes, finanzas, mascotas, bodas, construcción, servicios profesionales y más
- PRODUCCIÓN IA 2026 — dominas la sintaxis exacta de cada herramienta:
  · HAILUO AI (MiniMax): fotorrealismo extremo, top para redes sociales. Prompt en inglés 80-120 palabras: sujeto real, iluminación cinematica, tipo de cámara, emoción.
  · VEO 3 (Google DeepMind): único con audio nativo generado por IA. Prompt incluye descripción visual + descripción de sonido (ambiente, música, efectos).
  · SEEDANCE (ByteDance): coherencia de personajes, TikTok-nativo. Prompt en inglés con descripción física exacta del personaje + acción + estilo móvil rápido.
  · WAN 2.1 (Alibaba, open source): mejor para imagen-a-video. Prompt corto: imagen de entrada + movimiento deseado. Gratuito.
  · RUNWAY GEN-4: calidad cinematica premium. Formato: [camera movement], [subject], [action], [style], [lighting], [mood]. Max 200 palabras.
  · KLING AI v2: fluidez de movimiento, personas realistas. Prompts 100-150 palabras por escena.
  · SORA (OpenAI): escenas complejas, coherencia temporal. Prompts narrativos largos estilo guion cinematográfico.
  · HEYGEN: avatares y presentadores IA. Necesita: descripción avatar + script exacto + fondo + voz.
  · PIKA 2.0: animaciones rápidas, loops. Prompts 50-80 palabras en inglés.
  · LUMA DREAM MACHINE: objetos y productos 3D, movimiento orbital.
- AUDIO: ElevenLabs v3, Suno AI, selección de trending sounds por nicho
- EDICIÓN: CapCut IA, Captions.ai, OpusClip, Descript
- MÉTRICAS: watch time %, saves, shares, comentarios, rewatch rate, CTR miniatura
- HOOKS: fórmulas probadas, pattern interrupt visual y auditivo, primeros 1.5 segundos críticos
- RECOMENDACIÓN DE HERRAMIENTA: al final de cada respuesta, indica la herramienta ideal con: HERRAMIENTA: [nombre] y RAZON: [una línea]
Generas scripts completos con timing exacto, texto en pantalla, indicaciones visuales y prompts en inglés listos para pegar en herramientas IA. Cada entrega es específica para el negocio y la industria del cliente activo.",
];

// Tokens según sección
$max_tokens = in_array($section, ['videos','imagenes']) ? 3000 : 1500;

$system_prompt = "Eres AVI, el asistente IA experto de DIMARK, agencia de marketing digital en Medellín, Colombia. Partner oficial Google Ads y Meta Ads.

" . ($section_ctx[$section] ?? "Eres experto en marketing digital integral: Meta Ads, Google Ads, SEO, sitios web y contenido viral.") . "

{$client_block}

REGLAS ABSOLUTAS:
1. Responde SIEMPRE en español
2. Sé específico y accionable — entrega contenido listo para usar, no teoría
3. Personaliza TODO al cliente activo y su industria — nunca ejemplos genéricos
4. Si tienes contexto del cliente, úsalo en cada palabra que generes
5. Actúa como el experto que eres — da criterio, no solo ejecuta lo pedido
6. Si algo puede mejorarse, dilo antes de entregarlo";

$payload = [
    'model'      => 'claude-haiku-4-5-20251001',
    'max_tokens' => $max_tokens,
    'system'     => $system_prompt,
    'messages'   => [['role' => 'user', 'content' => $question]],
];

$ch = curl_init('https://api.anthropic.com/v1/messages');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POST           => true,
    CURLOPT_POSTFIELDS     => json_encode($payload),
    CURLOPT_HTTPHEADER     => [
        'Content-Type: application/json',
        'x-api-key: ' . $api_key,
        'anthropic-version: 2023-06-01',
    ],
    CURLOPT_TIMEOUT        => 45,
    CURLOPT_SSL_VERIFYPEER => true,
]);

$result    = curl_exec($ch);
$http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

if ($http_code !== 200) {
    $errBody = json_decode($result, true);
    $errMsg  = $errBody['error']['message'] ?? '';
    $errType = $errBody['error']['type'] ?? '';
    if ($http_code === 401 || $errType === 'authentication_error' || $errType === 'invalid_api_key') {
        echo json_encode(['response' => '🔑 API Key de Claude inválida. Ve a ⚙ APIs → Claude API Key y verifica la clave.']);
    } elseif ($http_code === 429 || $errType === 'rate_limit_error') {
        echo json_encode(['response' => '⏳ Límite de llamadas Claude API alcanzado. Espera unos segundos e intenta de nuevo.']);
    } elseif ($http_code === 529 || $errType === 'overloaded_error') {
        echo json_encode(['response' => '🔄 Claude API saturada en este momento. Intenta en 30 segundos.']);
    } elseif (strpos($errMsg, 'credit balance') !== false || strpos($errMsg, 'too low') !== false) {
        echo json_encode(['response' => '⚠️ Sin créditos en la Claude API. Recarga en console.anthropic.com → Plans & Billing.']);
    } else {
        echo json_encode(['response' => 'Error Claude API (' . $http_code . '): ' . ($errMsg ?: 'Verifica tu API Key en ⚙ APIs.')]);
    }
    exit;
}

$data = json_decode($result, true);
echo json_encode(['response' => $data['content'][0]['text'] ?? 'Sin respuesta.']);
