<?php
require_once __DIR__ . '/../config/config.php';
require_once __DIR__ . '/../services/WhatsAppService.php';

header('Content-Type: application/json; charset=utf-8');

if (function_exists('requireAuthentication')) requireAuthentication();

$input = json_decode(file_get_contents('php://input'), true) ?: $_POST;
$message_id = $input['message_id'] ?? null;
$emoji = $input['emoji'] ?? null;

if (!$message_id || !$emoji) {
    http_response_code(400);
    echo json_encode(['success' => false, 'error' => 'Parámetros faltantes: message_id, emoji']);
    exit;
}

try {
    $db = Database::getInstance();

    // Buscar mensaje objetivo para obtener user_id
    $stmt = $db->query("SELECT id, user_id, message_id, direction FROM conversations WHERE message_id = ? OR id = ? LIMIT 1", [$message_id, $message_id]);
    $target = $stmt->fetch();
    if (!$target) {
        http_response_code(404);
        echo json_encode(['success' => false, 'error' => 'Mensaje objetivo no encontrado']);
        exit;
    }

    // Obtener teléfono del usuario
    $user = $db->query("SELECT phone_number FROM users WHERE id = ? LIMIT 1", [$target['user_id']])->fetch();
    if (!$user || empty($user['phone_number'])) {
        http_response_code(500);
        echo json_encode(['success' => false, 'error' => 'No se pudo determinar el teléfono del usuario']);
        exit;
    }

    // Enviar reacción a través de WhatsAppService
    $wa = new WhatsAppService();
    $to = $user['phone_number'];
    $resp = null;
    try {
        $resp = $wa->sendReaction($to, $message_id, $emoji, false);
    } catch (Exception $e) {
        // fallar la operación de envío pero seguir guardando registro con status "failed"
        error_log('sendReaction failed: ' . $e->getMessage());
    }

    // Registrar la reacción en el mensaje objetivo (no crear un nuevo "reaction" como mensaje saliente)
    try {
        // Avoid updating `updated_at` because older schemas may not have it
        $update = ['reaction_emoji' => $emoji, 'reaction_to_message_id' => $message_id];
        // If send failed, optionally record a status on target (not mandatory)
        if (!$resp) $update['reaction_status'] = 'failed';

        $db->update('conversations', $update, 'id = :id', ['id' => $target['id']]);

        // Return updated row for convenience
        $updated = $db->query('SELECT * FROM conversations WHERE id = ? LIMIT 1', [$target['id']])->fetch();

        echo json_encode(['success' => true, 'message' => 'Reacción aplicada', 'updated' => $updated]);
    } catch (Exception $e) {
        http_response_code(500);
        echo json_encode(['success' => false, 'error' => 'No se pudo guardar la reacción: ' . $e->getMessage()]);
    }
} catch (Exception $e) {
    http_response_code(500);
    echo json_encode(['success' => false, 'error' => $e->getMessage()]);
}
