<?php 
 
namespace App\Controller; 
 
use App\Entity\Main\Contact; 
use ContainerC2aw7aC\getMessenger_Transport_AsyncService; 
use Doctrine\ORM\EntityManagerInterface; 
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; 
use Symfony\Component\HttpFoundation\Request; 
use Symfony\Component\HttpFoundation\Response; 
use Symfony\Component\Routing\Annotation\Route; 
use Symfony\Contracts\Translation\TranslatorInterface; 
use Symfony\Component\Mailer\MailerInterface; 
use Symfony\Component\Mime\Email; 
 
class ContactController extends AbstractController 
{ 
    /** 
     * @Route({ 
     *     "en": "/contact-us", 
     *     "tr": "/iletisim" 
     * }, name="contact", methods={"GET","POST"}) 
     */ 
   
    public function index(Request $request, TranslatorInterface $translator, EntityManagerInterface $manager, \Swift_Mailer $mailer): Response 
    { 
        $errorMessage = null; 
        $successMessage = null; 
        $fullName = null; 
        $email = null; 
        $subject = null; 
        $message = null; 
        $recaptchaError = null; 
 
        $content = null; 
        if ($request->getMethod() == 'POST') { 
            parse_str($request->getContent(), $content); 
 
            // reCAPTCHA doğrulaması 
            $recaptchaError = $this->validateRecaptcha($request, $content, $translator); 
             
            if (!isset($content['full_name']) || !$content['full_name']) { 
                $fullName = $translator->trans('THIS_VALUE_NOT_BE_BLANK'); 
            } 
 
            if (!isset($content['email']) || !$content['email']) { 
                $email = $translator->trans('THIS_VALUE_NOT_BE_BLANK'); 
            } else if (!is_numeric(strpos($content['email'], '@'))) { 
                $email = $translator->trans('THIS_VALUE_IS_NOT_CORRECT_EMAIL_ADDRESS'); 
            } 
 
            if (!isset($content['subject']) || !$content['subject']) { 
                $subject = $translator->trans('THIS_VALUE_NOT_BE_BLANK'); 
            } 
 
            if (!isset($content['message']) || !$content['message']) { 
                $message = $translator->trans('THIS_VALUE_NOT_BE_BLANK'); 
            } 
 
            if (!$fullName && !$email && !$subject && !$message && !$recaptchaError) { 
                try { 
                    // SwiftMailer ile mesaj oluşturma 
                    $emailMessage = (new \Swift_Message('Komili İletişim Formu: ' . $content['subject'])) 
                        ->setFrom(['eitrwcp@evyap.com' => 'Komili']) 
                        ->setTo('eitr@evyap.com') 
                        ->setBody(" 
                            <h2>İletişim Formu</h2> 
                            <p><strong>İsim:</strong> {$content['full_name']}</p> 
                            <p><strong>Email:</strong> {$content['email']}</p> 
                            <p><strong>Konu:</strong> {$content['subject']}</p> 
                            <p><strong>Mesaj:</strong></p> 
                            <p>{$content['message']}</p> 
                        ", 'text/html'); 
                     
                    // Email'i gönder 
                    $result = $mailer->send($emailMessage); 
                     
                    // Email başarıyla gönderildiyse veritabanına kaydet 
                    if ($result) { 
                        $contact = new Contact(); 
                        $contact->setMessage($content['message']) 
                            ->setEmail($content['email']) 
                            ->setFullName($content['full_name']) 
                            ->setSubject($content['subject']); 
 
                        $manager->persist($contact); 
                        $manager->flush(); 
                         
                        // Başarılı mesajı 
                        $successMessage = $translator->trans('YOUR_REQUEST_HAS_BEEN_SUCCESSFULLY_SUBMITTED'); 
                        $content = null; 
                    } else { 
                        $errorMessage = $translator->trans('MESSAGE_COULD_NOT_BE_SENT'); 
                    } 
                } catch (\Exception $e) { 
                    // Hata mesajı 
                    $errorMessage = $translator->trans('MESSAGE_COULD_NOT_BE_SENT'); 
                    // Hata logla 
                    error_log('Mail gönderim hatası: ' . $e->getMessage()); 
                } 
            } else { 
                $errorMessage = $translator->trans('CHECK_INFORMATION_AND_TRY_AGAIN'); 
            } 
        } 
 
        return $this->render('contact/index.html.twig', [ 
            'fullName' => $fullName, 
            'email' => $email, 
            'subject' => $subject, 
            'message' => $message, 
            'errorMessage' => $errorMessage, 
            'successMessage' => $successMessage, 
            'values' => $content, 
            'recaptchaError' => $recaptchaError ?? null, 
        ]); 
    } 
 
    /** 
     * reCAPTCHA v3 doğrulaması yapar 
     */ 
    private function validateRecaptcha(Request $request, array $content, TranslatorInterface $translator): ?string 
    { 
        // reCAPTCHA response'ı kontrol et 
        if (!isset($content['g-recaptcha-response']) || empty($content['g-recaptcha-response'])) { 
            return $translator->trans('RECAPTCHA_REQUIRED'); 
        } 
 
        $recaptchaResponse = $content['g-recaptcha-response']; 
        $secretKey = $_ENV['GOOGLE_RECAPTCHA_SECRET_KEY'] ?? '6LcmpY4rAAAAAD-HIDPv9v7ehCUrRMAtOcJfSEhO'; 
         
        // Google'a doğrulama isteği gönder 
        $verifyURL = 'https://www.google.com/recaptcha/api/siteverify'; 
        $postData = [ 
            'secret' => $secretKey, 
            'response' => $recaptchaResponse, 
            'remoteip' => $request->getClientIp() 
        ]; 
 
        $ch = curl_init(); 
        curl_setopt($ch, CURLOPT_URL, $verifyURL); 
        curl_setopt($ch, CURLOPT_POST, true); 
        curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($postData)); 
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 
         
        $response = curl_exec($ch); 
        curl_close($ch); 
         
        $responseData = json_decode($response, true); 
         
        // v3 için success ve score kontrolü 
        if (!$responseData['success']) { 
            return $translator->trans('RECAPTCHA_FAILED'); 
        } 
         
        // reCAPTCHA v3 score kontrolü (0.0-1.0, yüksek = insan, düşük = bot) 
        $score = $responseData['score'] ?? 0; 
        $threshold = 0.5; // Eşik değeri, ayarlanabilir 
         
        if ($score < $threshold) { 
            error_log("reCAPTCHA v3 Score düşük: $score (eşik: $threshold)"); 
            return $translator->trans('RECAPTCHA_FAILED'); 
        } 
         
        // Action kontrolü (opsiyonel) 
        $action = $responseData['action'] ?? ''; 
        if ($action !== 'contact_form') { 
            error_log("reCAPTCHA v3 Action uyumsuzluğu: $action"); 
            return $translator->trans('RECAPTCHA_FAILED'); 
        } 
         
        return null; // Doğrulama başarılı 
    } 
}