<?php
declare(strict_types=1);

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

if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
    http_response_code(405);
    echo json_encode([
        'success' => false,
        'message' => 'Метод запроса не поддерживается.'
    ], JSON_UNESCAPED_UNICODE);
    exit;
}

function clean_input(?string $value): string
{
    $value = trim((string)$value);
    $value = preg_replace('/[\r\n]+/', ' ', $value) ?? '';
    return htmlspecialchars($value, ENT_QUOTES | ENT_SUBSTITUTE, 'UTF-8');
}

function safe_length(string $value): int
{
    if (function_exists('mb_strlen')) {
        return mb_strlen($value, 'UTF-8');
    }

    return strlen($value);
}

$honeypot = trim((string)($_POST['website'] ?? ''));
if ($honeypot !== '') {
    echo json_encode([
        'success' => true,
        'message' => 'Спасибо! Заявка отправлена.'
    ], JSON_UNESCAPED_UNICODE);
    exit;
}

$name = clean_input($_POST['name'] ?? '');
$phone = clean_input($_POST['phone'] ?? '');
$comment = clean_input($_POST['comment'] ?? '');

$phoneDigits = preg_replace('/\D+/', '', $phone) ?? '';
$errors = [];

if (safe_length($name) < 2) {
    $errors[] = 'Укажите имя не короче 2 символов.';
}

if (strlen($phoneDigits) < 10 || strlen($phoneDigits) > 16) {
    $errors[] = 'Укажите корректный номер телефона.';
}

if (safe_length($comment) > 1200) {
    $errors[] = 'Комментарий слишком длинный.';
}

if (!empty($errors)) {
    http_response_code(422);
    echo json_encode([
        'success' => false,
        'message' => implode(' ', $errors)
    ], JSON_UNESCAPED_UNICODE);
    exit;
}

$to = 'test@site.ru';
$subject = 'Новая заявка с лендинга «Точка Опоры»';

$serverName = $_SERVER['SERVER_NAME'] ?? 'site.ru';
$fromEmail = 'landing@' . preg_replace('/[^a-zA-Z0-9.-]/', '', $serverName);

$message = implode("\n", [
    'Новая заявка с сайта «Точка Опоры»',
    '------------------------------------',
    'Имя: ' . $name,
    'Телефон: ' . $phone,
    'Комментарий: ' . ($comment !== '' ? $comment : 'Не указан'),
    'IP: ' . ($_SERVER['REMOTE_ADDR'] ?? 'unknown'),
    'Дата: ' . date('d.m.Y H:i:s')
]);

$headers = [
    'MIME-Version: 1.0',
    'Content-Type: text/plain; charset=UTF-8',
    'From: Точка Опоры <' . $fromEmail . '>',
    'Reply-To: ' . $fromEmail,
    'X-Mailer: PHP/' . phpversion()
];

$encodedSubject = '=?UTF-8?B?' . base64_encode($subject) . '?=';
$sent = @mail($to, $encodedSubject, $message, implode("\r\n", $headers));

if ($sent) {
    echo json_encode([
        'success' => true,
        'message' => 'Спасибо! Заявка отправлена. Мы свяжемся с вами в ближайшее время.'
    ], JSON_UNESCAPED_UNICODE);
    exit;
}

http_response_code(500);
echo json_encode([
    'success' => false,
    'message' => 'Письмо не отправлено. Проверьте настройки почтовой функции на сервере или укажите SMTP.'
], JSON_UNESCAPED_UNICODE);
