<?php

// ==== CORS FIX START (DODANE) ====
// 1. Pobierz domenę, z której przychodzi zapytanie (np. https://wp8172288.hostingrd.pl:2083)
$origin = $_SERVER['HTTP_ORIGIN'] ?? '';

// 2. Jeśli zapytanie ma nagłówek Origin, ustawiamy odpowiednie nagłówki CORS
if ($origin) {
    header("Access-Control-Allow-Origin: $origin");
    header("Access-Control-Allow-Credentials: true");
    header("Access-Control-Allow-Methods: POST, GET, OPTIONS");
    header("Access-Control-Allow-Headers: Content-Type, Authorization, X-Requested-With");
}

// 3. Obsługa zapytania "Preflight" (OPTIONS)
// Przeglądarka najpierw pyta "czy mogę?", zanim wyśle dane. Musimy odpowiedzieć "tak" (200 OK).
if (($_SERVER['REQUEST_METHOD'] ?? '') === 'OPTIONS') {
    http_response_code(200);
    exit;
}
// ==== CORS FIX END ====


// ==== KONFIGURACJA ====
const N8N_AGENT_URL  = 'https://n8n.programy.domenujznami.pl/webhook/f72df029-f6e9-4392-82b2-61bf16aae852';
const SESSION_SECRET = 'Wen-Chiave-Ling-Ferro-Oriole-Panther-Vater-Heron-Universidad-5-?';

const TIMEOUT_SECONDS = 20;
const MAX_BODY_BYTES  = 65536;

// ==== FUNKCJE POMOCNICZE ====

function json_response(int $code, array $data): void
{
    http_response_code($code);
    header('Content-Type: application/json; charset=utf-8');
    echo json_encode($data, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
    exit;
}

// ==== PODSTAWOWE WALIDACJE ====

// 1. Tylko POST (OPTIONS obsłużyliśmy wyżej)
if (($_SERVER['REQUEST_METHOD'] ?? '') !== 'POST') {
    json_response(405, [
    'success' => false,
    'error'   => 'Method not allowed, use POST'
    ]);
}

// 2. Wymuś application/json
$ctype = $_SERVER['CONTENT_TYPE'] ?? ($_SERVER['HTTP_CONTENT_TYPE'] ?? '');
if (stripos($ctype, 'application/json') === false) {
    json_response(415, [
    'success' => false,
    'error'   => 'Unsupported media type (expect application/json)'
    ]);
}

// 3. Limit rozmiaru body
$raw = file_get_contents('php://input', false, null, 0, MAX_BODY_BYTES + 1);
if ($raw === false || $raw === '') {
    json_response(400, [
    'success' => false,
    'error'   => 'Empty request body'
    ]);
}
if (strlen($raw) > MAX_BODY_BYTES) {
    json_response(413, [
    'success' => false,
    'error'   => 'Payload too large'
    ]);
}

// 4. Parsowanie JSON
$in = json_decode($raw, true);
if (!is_array($in)) {
    json_response(400, [
    'success' => false,
    'error'   => 'Invalid JSON'
    ]);
}

// (opcjonalnie) sprawdź podstawowe pola
if (!isset($in['chatInput']) || !is_string($in['chatInput'])) {
    json_response(400, [
    'success' => false,
    'error'   => 'Missing or invalid field: chatInput'
    ]);
}

// 5. Sprawdź cookie cPanel (przekazane w body JSON z JavaScript)
// ✅ ZMIENIONE: Najpierw szukamy w body JSON, potem fallback na $_COOKIE
$cpsession = $in['cpsession'] ?? '';

// Fallback: Jeśli JS nie wysłał, sprawdźmy $_COOKIE (na wypadek testów lokalnych)
if (!$cpsession) {
    $cpsession = $_COOKIE['cpsession'] ?? '';
}

// Zmniejszyłem limit długości dla pewności (czasem sesja jest krótsza)
if (!$cpsession || strlen($cpsession) < 5) {
    json_response(401, [
    'success' => false,
    'error'   => 'Missing or invalid cpsession token (not logged into cPanel?)',
    'hint'    => 'Please refresh cPanel page and try again.',
    'received_body_keys' => array_keys($in) // Debugowanie - jakie dane przyszły
    ]);
}

// 6. Sprawdź dostępność cURL
if (!function_exists('curl_init')) {
    json_response(500, [
    'success' => false,
    'error'   => 'cURL extension is not available in this PHP environment'
    ]);
}

// ==== PRZYGOTOWANIE REQUESTU DO n8n ====

// Nagłówki dla n8n
$headers = [
    'Content-Type: application/json',
    'Accept: application/json',
    'User-Agent: cpanel-chat-agent/1.0',
    'x-internal-auth: ' . SESSION_SECRET,
    'x-client-ip: '  . ($_SERVER['REMOTE_ADDR']    ?? '0.0.0.0'),
    'x-user-agent: ' . ($_SERVER['HTTP_USER_AGENT'] ?? 'unknown'),
    'Cookie: cpsession=' . $cpsession,
];

// ==== WYSŁANIE DO n8n ====

$ch = curl_init(N8N_AGENT_URL);
curl_setopt_array($ch, [
    CURLOPT_POST    => true,
    CURLOPT_HTTPHEADER    => $headers,
    CURLOPT_POSTFIELDS    => json_encode($in, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES),
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HEADER    => true,
    CURLOPT_TIMEOUT    => TIMEOUT_SECONDS,
    CURLOPT_FOLLOWLOCATION => false,
    CURLOPT_SSL_VERIFYPEER => true,
    CURLOPT_SSL_VERIFYHOST => 2,
]);

$response = curl_exec($ch);
if ($response === false) {
    $err = curl_error($ch);
    curl_close($ch);

    json_response(502, [
    'success' => false,
    'error'   => 'Bad gateway (n8n unreachable)',
    'detail'  => $err
    ]);
}

$headerSize = curl_getinfo($ch, CURLINFO_HEADER_SIZE);
$httpCode   = curl_getinfo($ch, CURLINFO_HTTP_CODE) ?: 200;
$respBody   = substr($response, $headerSize);
curl_close($ch);

// Spróbuj sparsować JSON od n8n
$out = json_decode($respBody, true);
if ($out === null) {
    // n8n zwrócił coś nie-JSON → oddaj surowy tekst
    json_response($httpCode, [
    'success'   => false,
    'proxy_raw' => $respBody
    ]);
}

// Zwróć odpowiedź 1:1 dalej do frontu
json_response($httpCode, $out);