<?php
/**
 * price-match.php - Obrada zahteva za upoređivanje cena
 * 
 * Ovaj fajl obrađuje zahteve korisnika za korekciju cene kada pronađu povoljniju
 * ponudu kod konkurencije.
 */

// Uključivanje konfiguracije i neophodnih fajlova
require_once '../includes/config.php';
require_once '../includes/db.php';
require_once '../includes/functions.php';
require_once '../includes/email_helper.php';



// Provera CSRF tokena
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    if (!isset($_POST['csrf_token']) || !verify_csrf_token($_POST['csrf_token'])) {
        // Logiraj pokušaj
        security_log('Invalid CSRF token in order processing', 'warning');
        
        // Preusmeri korisnika
        header('Location: /checkout.php?error=security');
        exit;
    }
}

// Inicijalizacija response niza
$response = [
    'success' => false,
    'message' => 'Došlo je do greške prilikom slanja zahteva za korekciju cene.'
];

// Provera da li je zahtev POST
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    // Provera CSRF tokena (ako koristite CSRF zaštitu)
    // Odkomentarišite sledeće linije ako imate implementiranu CSRF zaštitu
    /*
    if (!isset($_POST['csrf_token']) || !verify_csrf_token($_POST['csrf_token'])) {
        $response['message'] = 'Nevažeći sigurnosni token. Molimo osvežite stranicu i pokušajte ponovo.';
        header('Content-Type: application/json');
        echo json_encode($response);
        exit;
    }
    */
    
    // Validacija ulaznih parametara
    $product_id = isset($_POST['product_id']) ? intval($_POST['product_id']) : 0;
    $product_name = isset($_POST['product_name']) ? trim($_POST['product_name']) : '';
    $name = isset($_POST['name']) ? trim($_POST['name']) : '';
    $email = isset($_POST['email']) ? trim($_POST['email']) : '';
    $phone = isset($_POST['phone']) ? trim($_POST['phone']) : '';
    $competitor_url = isset($_POST['competitor_url']) ? trim($_POST['competitor_url']) : '';
    $competitor_price = isset($_POST['competitor_price']) ? floatval($_POST['competitor_price']) : 0;
    $message = isset($_POST['message']) ? trim($_POST['message']) : '';
    
    // Validacija ulaznih podataka
    $errors = [];
    
    if ($product_id <= 0) {
        $errors[] = 'Neispravan proizvod.';
    }
    
    if (empty($name)) {
        $errors[] = 'Ime je obavezno.';
    } elseif (mb_strlen($name) > 100) {
        $errors[] = 'Ime je predugačko (maksimalno 100 karaktera).';
    }
    
    if (empty($email)) {
        $errors[] = 'Email adresa je obavezna.';
    } elseif (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
        $errors[] = 'Email adresa nije ispravna.';
    }
    
    if (!empty($phone) && !preg_match('/^[0-9+\-\s()]{6,20}$/', $phone)) {
        $errors[] = 'Format telefona nije ispravan.';
    }
    
    // Proverimo da li korisnik ima ili URL ili fajl
    $has_file = isset($_FILES['proof_file']) && $_FILES['proof_file']['error'] === UPLOAD_ERR_OK;
    
    // Ako nema fajl, URL mora biti prisutan i ispravan
    if (!$has_file) {
        if (empty($competitor_url)) {
            $errors[] = 'Morate uneti link ka proizvodu sa nižom cenom ili priložiti sliku/dokument kao dokaz.';
        } elseif (!filter_var($competitor_url, FILTER_VALIDATE_URL)) {
            $errors[] = 'Format linka nije ispravan. Molimo unesite validan URL (npr. https://example.com).';
        }
    }
    
    // Ako ima URL (nije obavezan ako ima fajl), proveri da li je ispravan format
    if (!empty($competitor_url) && !filter_var($competitor_url, FILTER_VALIDATE_URL)) {
        $errors[] = 'Format linka nije ispravan. Molimo unesite validan URL (npr. https://example.com).';
    }
    
    if ($competitor_price <= 0) {
        $errors[] = 'Cena kod konkurencije mora biti pozitivan broj.';
    }
    
    if (mb_strlen($message) > 1000) {
        $errors[] = 'Poruka je predugačka (maksimalno 1000 karaktera).';
    }
    
    // Ako nema grešaka, nastavi sa slanjem zahteva
    if (empty($errors)) {
        // Provera da li proizvod postoji i da li je aktivan
        $product = get_row("SELECT id, name, price, sale_price, status FROM products WHERE id = ? AND status = 'active'", [$product_id]);
        
        if ($product) {
            // Trenutna cena proizvoda
            $current_price = !empty($product['sale_price']) ? $product['sale_price'] : $product['price'];
            
            // Obrada uploada fajla ako postoji
            $proof_file = '';
            if ($has_file) {
                $proof_file = processPriceMatchProofFile($_FILES['proof_file']);
                if (empty($proof_file)) {
                    $response['message'] = 'Došlo je do greške prilikom obrade fajla. Proverite format i veličinu fajla (maksimalno 5MB).';
                    header('Content-Type: application/json');
                    echo json_encode($response);
                    exit;
                }
            }
            
            try {
                // Započni transakciju
                $conn->beginTransaction();
                
                // Dodavanje zahteva u bazu
                $status = 'pending'; // Status zahteva
                
                $insert = execute_query("
                    INSERT INTO price_match_requests (product_id, name, email, phone, competitor_url, competitor_price, current_price, message, proof_file, status, created_at)
                    VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, NOW())
                ", [$product_id, $name, $email, $phone, $competitor_url, $competitor_price, $current_price, $message, $proof_file, $status]);
                
                if ($insert) {
                    $request_id = last_insert_id();
                    
                    // Konfigurisanje email obaveštenja
                    $admin_email = get_setting('admin_email', 'info@hugong-aparati.rs');
                    $product_name = $product['name'];
                    
                    $subject = "Novi zahtev za korekciju cene: $product_name";
                    
                    // HTML format maila
                    $email_html = "
                    <html>
                    <head>
                      <style>
                        body { font-family: Arial, sans-serif; line-height: 1.6; color: #333; }
                        .container { max-width: 600px; margin: 0 auto; padding: 20px; }
                        h2 { color: #f6cc00; }
                        .price { font-weight: bold; }
                        .details { background: #f9f9f9; padding: 15px; margin: 15px 0; }
                        .footer { font-size: 12px; color: #777; margin-top: 30px; }
                      </style>
                    </head>
                    <body>
                      <div class='container'>
                        <h2>Novi zahtev za korekciju cene</h2>
                        <p>Primljen je novi zahtev za korekciju cene od: <strong>$name</strong></p>
                        
                        <div class='details'>
                          <p><strong>Proizvod:</strong> $product_name (ID: $product_id)</p>
                          <p><strong>Trenutna cena:</strong> <span class='price'>" . number_format($current_price, 0, ',', '.') . " RSD</span></p>
                          <p><strong>Konkurentska cena:</strong> <span class='price'>" . number_format($competitor_price, 0, ',', '.') . " RSD</span></p>";
                    
                    if (!empty($competitor_url)) {
                        $email_html .= "<p><strong>Link ka konkurentskoj ponudi:</strong> <a href='$competitor_url'>$competitor_url</a></p>";
                    }
                    
                    if (!empty($phone)) {
                        $email_html .= "<p><strong>Telefon:</strong> $phone</p>";
                    }
                    
                    if (!empty($message)) {
                        $email_html .= "<p><strong>Dodatne napomene:</strong><br>" . nl2br(htmlspecialchars($message)) . "</p>";
                    }
                    
                    if (!empty($proof_file)) {
                        $email_html .= "<p><strong>Dokaz:</strong> Korisnik je priložio fajl dokaza. <a href='" . SITE_URL . "/uploads/price_match/$proof_file'>Pogledaj dokaz</a></p>";
                    }
                    
                    $email_html .= "
                        </div>
                        
                        <p>Možete odgovoriti na ovaj zahtev u admin panelu.</p>
                        
                        <div class='footer'>
                          <p>Ova poruka je automatski generisana. Molimo ne odgovarajte direktno na nju.</p>
                        </div>
                      </div>
                    </body>
                    </html>";
                    
                    // Tekstualni format za email klijente koji ne podržavaju HTML
                    $email_text = "Novi zahtev za korekciju cene od: $name\n\n";
                    $email_text .= "Proizvod: $product_name (ID: $product_id)\n";
                    $email_text .= "Trenutna cena: " . number_format($current_price, 0, ',', '.') . " RSD\n";
                    $email_text .= "Konkurentska cena: " . number_format($competitor_price, 0, ',', '.') . " RSD\n";
                    
                    if (!empty($competitor_url)) {
                        $email_text .= "Link ka konkurentskoj ponudi: $competitor_url\n\n";
                    }
                    
                    if (!empty($phone)) {
                        $email_text .= "Telefon: $phone\n";
                    }
                    
                    if (!empty($message)) {
                        $email_text .= "Dodatne napomene:\n$message\n\n";
                    }
                    
                    if (!empty($proof_file)) {
                        $email_text .= "Dokaz: Korisnik je priložio fajl dokaza. Dostupan u admin panelu.\n\n";
                    }
                    
                    $email_text .= "Možete odgovoriti na ovaj zahtev u admin panelu.";
                    
                    // Konfigurisanje email headera
                    $site_name = get_setting('site_name', 'Hugong Aparati');
                    $site_email = get_setting('site_email', 'noreply@hugong-aparati.rs');
                    
                    $headers = "From: $site_name <$site_email>\r\n";
                    $headers .= "Reply-To: $name <$email>\r\n";
                    $headers .= "X-Priority: 1\r\n";
                    $headers .= "X-Mailer: PHP/" . phpversion() . "\r\n";
                    $headers .= "MIME-Version: 1.0\r\n";
                    $headers .= "Content-Type: multipart/alternative; boundary=\"boundary\"\r\n";
                    
                    $message_body = "--boundary\r\n";
                    $message_body .= "Content-Type: text/plain; charset=UTF-8\r\n";
                    $message_body .= "Content-Transfer-Encoding: 8bit\r\n\r\n";
                    $message_body .= $email_text . "\r\n\r\n";
                    $message_body .= "--boundary\r\n";
                    $message_body .= "Content-Type: text/html; charset=UTF-8\r\n";
                    $message_body .= "Content-Transfer-Encoding: 8bit\r\n\r\n";
                    $message_body .= $email_html . "\r\n\r\n";
                    $message_body .= "--boundary--";
                    
                    // Slanje emaila
                    $mail_sent = mail($admin_email, $subject, $message_body, $headers);
                    
                    // Potvrdi transakciju
                    $conn->commit();
                    
                    $response = [
                        'success' => true,
                        'message' => 'Vaš zahtev za korekciju cene je uspešno poslat. Kontaktiraćemo vas u najkraćem mogućem roku.',
                        'request_id' => $request_id
                    ];
                } else {
                    throw new Exception('Došlo je do greške prilikom čuvanja zahteva.');
                }
            } catch (Exception $e) {
                // Otkaži transakciju u slučaju greške
                $conn->rollBack();
                
                error_log('Price match error: ' . $e->getMessage());
                $response['message'] = 'Došlo je do greške prilikom obrade zahteva. Molimo pokušajte ponovo kasnije.';
            }
        } else {
            $response['message'] = 'Proizvod nije pronađen ili trenutno nije dostupan.';
        }
    } else {
        $response['message'] = 'Molimo ispravite sledeće greške: ' . implode(' ', $errors);
        $response['errors'] = $errors;
    }
}

// Vraćanje odgovora u JSON formatu
header('Content-Type: application/json');
echo json_encode($response);
exit;

/**
 * Obrađuje uploadovani fajl kao dokaz za korekciju cene
 * 
 * @param array $file $_FILES['proof_file'] podatak
 * @return string Naziv sačuvanog fajla ili prazan string u slučaju greške
 */
function processPriceMatchProofFile($file) {
    // Definišemo dozvoljene tipove fajlova
    $allowed_types = ['image/jpeg', 'image/png', 'image/gif', 'application/pdf'];
    $max_size = 5 * 1024 * 1024; // 5MB
    
    // Provera veličine i tipa fajla
    if ($file['size'] > $max_size) {
        return '';
    }
    
    if (!in_array($file['type'], $allowed_types)) {
        return '';
    }
    
    // Kreiranje direktorijuma ako ne postoji
    $upload_dir = '../uploads/price_match/';
    if (!is_dir($upload_dir)) {
        mkdir($upload_dir, 0755, true);
    }
    
    // Generisanje bezbednog imena fajla
    $file_ext = pathinfo($file['name'], PATHINFO_EXTENSION);
    $file_name = uniqid('price_match_') . '_' . date('Ymd') . '.' . $file_ext;
    $target_path = $upload_dir . $file_name;
    
    // Upload fajla
    if (move_uploaded_file($file['tmp_name'], $target_path)) {
        return $file_name;
    }
    
    return '';
}