<?php

declare(strict_types=1);

require_once __DIR__ . '/../app/Core/bootstrap.php';
require_once __DIR__ . '/../app/Rayan/RayanPanelService.php';

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

try {
    if (($_SERVER['REQUEST_METHOD'] ?? '') !== 'POST') {
        http_response_code(405);
        echo json_encode(['success' => false, 'message' => 'Only POST method is allowed.'], JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
        exit;
    }

    $service = new RayanPanelService();
    $config = $service->config();

    $secret = trim((string)($config['endpoint_secret'] ?? ''));
    if ($secret !== '') {
        $given = trim((string)($_GET['secret'] ?? ($_SERVER['HTTP_X_RAYAN_SECRET'] ?? '')));
        if (!hash_equals($secret, $given)) {
            http_response_code(403);
            echo json_encode(['success' => false, 'message' => 'Forbidden.'], JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
            exit;
        }
    }

    $raw = file_get_contents('php://input');
    rayanWebhookLog($config, 'endpoint فرم‌افزار داخل پنل دریافت شد', [
        'ip' => $_SERVER['REMOTE_ADDR'] ?? null,
        'content_type' => $_SERVER['CONTENT_TYPE'] ?? null,
        'raw' => mb_substr((string)$raw, 0, 5000),
    ]);

    $payload = json_decode((string)$raw, true);
    if (!is_array($payload)) {
        throw new RuntimeException('JSON معتبر نیست.');
    }

    $result = $service->handleIncomingFormPayload($payload, (bool)($config['auto_process_on_webhook'] ?? false));

    http_response_code(200);
    echo json_encode($result + ['message' => ($result['request_created'] ?? false) ? 'فرم ذخیره شد و داخل جدول ثبت فاکتور قرار گرفت.' : 'فرم دریافت شد اما درخواست جدیدی ساخته نشد.'], JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
} catch (Throwable $e) {
    if (isset($config) && is_array($config)) {
        rayanWebhookLog($config, 'خطا در endpoint فرم‌افزار پنل', ['error' => $e->getMessage()]);
    }
    http_response_code(500);
    echo json_encode([
        'success' => false,
        'message' => 'خطا در ذخیره فرم.',
        'error' => $e->getMessage(),
    ], JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
}
