<?php
declare(strict_types=1);

function utf8_len(string $s): int
{
    if (function_exists('mb_strlen')) {
        return (int) mb_strlen($s, 'UTF-8');
    }
    return strlen($s);
}

// UTF-8 JSON API for the Arka landing contact form.
header('Content-Type: application/json; charset=utf-8');
header('Access-Control-Allow-Origin: https://arka.barname-nevisan.ir');
header('Access-Control-Allow-Methods: POST, OPTIONS');
header('Access-Control-Allow-Headers: Content-Type');

if (($_SERVER['REQUEST_METHOD'] ?? '') === 'OPTIONS') {
    http_response_code(200);
    exit;
}

if (($_SERVER['REQUEST_METHOD'] ?? '') !== 'POST') {
    http_response_code(405);
    echo json_encode(['ok' => false, 'error' => 'method_not_allowed']);
    exit;
}

$raw  = file_get_contents('php://input');
$data = json_decode($raw, true);
if (!is_array($data)) {
    http_response_code(400);
    echo json_encode(['ok' => false, 'error' => 'invalid_json']);
    exit;
}

// Honeypot — bots fill hidden fields; real users leave this empty.
$honeypot = trim((string)($data['website'] ?? ''));
if ($honeypot !== '') {
    http_response_code(400);
    echo json_encode(['ok' => false, 'error' => 'spam']);
    exit;
}

$name        = trim((string)($data['name']        ?? ''));
$org         = trim((string)($data['org']         ?? ''));
$email       = trim((string)($data['email']       ?? ''));
$phone       = trim((string)($data['phone']       ?? ''));
$contentType = trim((string)($data['contentType'] ?? ''));
$message     = trim((string)($data['message']     ?? ''));

$allowedContentTypes = [
    'آرشیو اسناد اداری و مکاتبات',
    'اسناد تاریخی و نسخ خطی',
    'مقالات و منابع پژوهشی',
    'پرونده‌ها و سوابق حقوقی',
    'آرشیو خبری و رسانه‌ای',
    'سایر',
];

// Validation
if ($name === '' || utf8_len($name) > 200) {
    http_response_code(422);
    echo json_encode(['ok' => false, 'error' => 'validation', 'message' => 'نام الزامی است.']);
    exit;
}

if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
    http_response_code(422);
    echo json_encode(['ok' => false, 'error' => 'validation', 'message' => 'آدرس ایمیل معتبر نیست.']);
    exit;
}

if ($phone !== '') {
    $phoneDigits = preg_replace('/\D/', '', $phone);
    if ($phoneDigits !== '' && (strlen($phoneDigits) < 8 || strlen($phoneDigits) > 15)) {
        http_response_code(422);
        echo json_encode(['ok' => false, 'error' => 'validation', 'message' => 'شماره تماس معتبر نیست.']);
        exit;
    }
}

if ($contentType !== '' && !in_array($contentType, $allowedContentTypes, true)) {
    http_response_code(422);
    echo json_encode(['ok' => false, 'error' => 'validation', 'message' => 'نوع محتوا معتبر نیست.']);
    exit;
}

if ($message === '' || utf8_len($message) > 10000) {
    http_response_code(422);
    echo json_encode(['ok' => false, 'error' => 'validation', 'message' => 'پیام الزامی است.']);
    exit;
}

// Prevent header injection
$nameSafe        = str_replace(["\r", "\n"], '', $name);
$orgSafe         = str_replace(["\r", "\n"], '', $org);
$phoneSafe       = str_replace(["\r", "\n"], '', $phone);
$contentTypeSafe = str_replace(["\r", "\n"], '', $contentType);

$to             = 'arka@barname-nevisan.ir';
$encodedSubject = '=?UTF-8?B?' . base64_encode('[وب‌سایت آرکا] پیام جدید از ' . $nameSafe) . '?=';

$bodyLines = [
    'پیام جدید از فرم تماس وب‌سایت آرکا',
    '',
    'نام: '         . $nameSafe,
    'سازمان: '      . $orgSafe,
    'ایمیل: '       . $email,
    'تلفن: '        . $phoneSafe,
    'نوع محتوا: '   . $contentTypeSafe,
    '',
    'متن پیام:',
    $message,
    '',
    '---',
    'زمان (UTC): ' . gmdate('Y-m-d H:i:s'),
    'IP: '         . ($_SERVER['REMOTE_ADDR'] ?? 'unknown'),
];

$body = implode("\n", $bodyLines);

$headers = [
    'MIME-Version: 1.0',
    'Content-Type: text/plain; charset=UTF-8',
    'Content-Transfer-Encoding: 8bit',
    'From: Arka Website <noreply@arka.barname-nevisan.ir>',
    'Reply-To: ' . $email,
    'X-Mailer: PHP/' . PHP_VERSION,
];

$headersStr = implode("\r\n", $headers);

$sent = @mail($to, $encodedSubject, $body, $headersStr);

if (!$sent) {
    http_response_code(500);
    echo json_encode(['ok' => false, 'error' => 'mail_failed', 'message' => 'خطا در ارسال ایمیل. لطفاً مستقیماً تماس بگیرید.']);
    exit;
}

echo json_encode(['ok' => true, 'message' => 'پیام شما با موفقیت ارسال شد.']);
