<?php
declare(strict_types=1);require dirname(__DIR__).'/core/bootstrap.php';
if(!request_is_post())json_response(['ok'=>false,'message'=>'Geçersiz istek.'],405);
verify_csrf();
if(!rate_limit('booking:'.client_ip(),5,600))json_response(['ok'=>false,'message'=>'Çok fazla rezervasyon denemesi yapıldı. Lütfen daha sonra tekrar deneyin.'],429);
$data=$_POST;$required=['duration_id','reservation_date','start_time','guest_name','guest_email','guest_phone','kvkk_consent','terms_consent'];
foreach($required as $field)if(empty($data[$field]))json_response(['ok'=>false,'message'=>'Lütfen zorunlu alanları eksiksiz doldurun.'],422);
if(!filter_var($data['guest_email'],FILTER_VALIDATE_EMAIL))json_response(['ok'=>false,'message'=>'Geçerli bir e-posta adresi girin.'],422);
if(mb_strlen(trim((string)$data['guest_name']))<3||mb_strlen(trim((string)$data['guest_name']))>160)json_response(['ok'=>false,'message'=>'Ad soyad bilgisini kontrol edin.'],422);
if(mb_strlen(preg_replace('/\D+/','',(string)$data['guest_phone'])??'')<10)json_response(['ok'=>false,'message'=>'Geçerli bir telefon numarası girin.'],422);
if(mb_strlen((string)($data['notes']??''))>1000)json_response(['ok'=>false,'message'=>'Rezervasyon notu çok uzun.'],422);
if(!valid_iso_date((string)$data['reservation_date'])||!preg_match('/^\d{2}:\d{2}$/',$data['start_time']))json_response(['ok'=>false,'message'=>'Tarih veya saat geçersiz.'],422);
try{
 $result=create_reservation($data);
 if(setting_bool('reservation_auto_confirm'))db()->prepare("UPDATE reservations SET status='confirmed' WHERE id=?")->execute([$result['id']]);
 $manage=url('/rezervasyon/yonet/'.$result['token']);
 $subject='Nekrut Wellness rezervasyon talebi '.$result['code'];
 $body="Rezervasyon talebiniz alınmıştır.\nKod: {$result['code']}\nYönetim: {$manage}\n\nSite üzerinden ödeme alınmamıştır.";
 $from=(string)setting('email','wellness@nekrut.com');
 @mail((string)$data['guest_email'],$subject,$body,"From: {$from}\r\nContent-Type: text/plain; charset=UTF-8");
 $adminBody="Yeni rezervasyon talebi.\nKod: {$result['code']}\nMisafir: ".trim((string)$data['guest_name'])."\nTelefon: ".trim((string)$data['guest_phone'])."\nTarih: ".(string)$data['reservation_date']." ".(string)$data['start_time']."\nPanel: ".url('/admin/reservations.php?view='.$result['id']);
 @mail($from,'Yeni spa rezervasyonu '.$result['code'],$adminBody,"From: {$from}\r\nContent-Type: text/plain; charset=UTF-8");
 json_response(['ok'=>true,'redirect'=>url('/rezervasyon/basarili/'.$result['code'])]);
}catch(Throwable $e){
 $log=sprintf("[%s] Booking API: %s in %s:%d\n",date('c'),$e->getMessage(),$e->getFile(),$e->getLine());@file_put_contents(dirname(__DIR__).'/storage/logs/app.log',$log,FILE_APPEND|LOCK_EX);
 $message=$e instanceof PDOException?'Rezervasyon şu anda tamamlanamadı. Lütfen tekrar deneyin.':$e->getMessage();json_response(['ok'=>false,'message'=>$message],422);
}
