<?php
// Uključivanje konfiguracije i neophodni fajlovi
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 recenzije.'
];

// Provera da li je korisnik prijavljen
if (!is_logged_in()) {
    $response['message'] = 'Morate biti prijavljeni da biste ostavili recenziju.';
    
    header('Content-Type: application/json');
    echo json_encode($response);
    exit;
}

// Provera da li je zahtev POST
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    // Validacija ulaznih parametara
    $product_id = isset($_POST['product_id']) ? intval($_POST['product_id']) : 0;
    $rating = isset($_POST['rating']) ? intval($_POST['rating']) : 0;
    $title = isset($_POST['title']) ? trim($_POST['title']) : '';
    $comment = isset($_POST['comment']) ? trim($_POST['comment']) : '';
    $consent = isset($_POST['consent']) ? true : false;
    
    // Osnovna validacija
    $errors = [];
    
    if ($product_id <= 0) {
        $errors[] = 'Neispravan proizvod.';
    }
    
    if ($rating < 1 || $rating > 5) {
        $errors[] = 'Ocena mora biti između 1 i 5.';
    }
    
    if (empty($title)) {
        $errors[] = 'Naslov recenzije je obavezan.';
    } elseif (mb_strlen($title) > 100) {
        $errors[] = 'Naslov recenzije je predugačak (maksimalno 100 karaktera).';
    }
    
    if (empty($comment)) {
        $errors[] = 'Tekst recenzije je obavezan.';
    } elseif (mb_strlen($comment) > 2000) {
        $errors[] = 'Tekst recenzije je predugačak (maksimalno 2000 karaktera).';
    }
    
    if (!$consent) {
        $errors[] = 'Potrebno je da potvrdite saglasnost.';
    }
    
    // Ako nema grešaka, nastavi sa slanjem recenzije
    if (empty($errors)) {
        // Provera da li proizvod postoji
        $product = get_row("SELECT id, name FROM products WHERE id = ?", [$product_id]);
        
        if ($product) {
            // Dohvati ID trenutno prijavljenog korisnika
            $user_id = $_SESSION['user_id'];
            
            // Provera da li je korisnik već ostavio recenziju za ovaj proizvod
            $existing_review = get_row("SELECT id FROM reviews WHERE user_id = ? AND product_id = ?", [$user_id, $product_id]);
            
            if ($existing_review) {
                // Ažuriranje postojeće recenzije
                $update = execute_query("
                    UPDATE reviews 
                    SET rating = ?, title = ?, comment = ?, updated_at = NOW()
                    WHERE id = ?
                ", [$rating, $title, $comment, $existing_review['id']]);
                
                if ($update) {
                    // Ažuriranje ukupne ocene proizvoda
                    update_product_rating($product_id);
                    
                    $response = [
                        'success' => true,
                        'message' => 'Vaša recenzija je uspešno ažurirana.',
                        'is_update' => true
                    ];
                }
            } else {
                // Dodavanje nove recenzije
                $status = 'pending'; // ili 'approved' ako ne želite moderaciju
                
                // Provera da li je korisnik kupio proizvod
                $verified_purchase = check_if_user_purchased_product($user_id, $product_id);
                
                $insert = execute_query("
                    INSERT INTO reviews (product_id, user_id, rating, title, comment, verified_purchase, status, created_at)
                    VALUES (?, ?, ?, ?, ?, ?, ?, NOW())
                ", [$product_id, $user_id, $rating, $title, $comment, $verified_purchase ? 1 : 0, $status]);
                
                if ($insert) {
                    // Ažuriranje ukupne ocene proizvoda ako je recenzija automatski odobrena
                    if ($status === 'approved') {
                        update_product_rating($product_id);
                    }
                    
                    $response = [
                        'success' => true,
                        'message' => 'Vaša recenzija je uspešno poslata.' . ($status === 'pending' ? ' Biće objavljena nakon pregleda administratora.' : ''),
                        'is_update' => false
                    ];
                }
            }
        } else {
            $response['message'] = 'Proizvod nije pronađen.';
        }
    } 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;

/**
 * Pomoćna funkcija za ažuriranje ukupne ocene proizvoda
 */
function update_product_rating($product_id) {
    // Dohvati sve odobrene recenzije za proizvod
    $reviews = get_rows("SELECT rating FROM reviews WHERE product_id = ? AND status = 'approved'", [$product_id]);
    
    if (!empty($reviews)) {
        $total_rating = 0;
        foreach ($reviews as $review) {
            $total_rating += $review['rating'];
        }
        
        $rating_count = count($reviews);
        
        // Ažuriranje proizvoda
        execute_query("
            UPDATE products 
            SET rating_sum = ?, rating_count = ?
            WHERE id = ?
        ", [$total_rating, $rating_count, $product_id]);
    }
}

/**
 * Provera da li je korisnik kupio proizvod
 */
function check_if_user_purchased_product($user_id, $product_id) {
    // Ovo je pojednostavljena verzija; stvarna logika bi trebala proveriti tabelu porudžbina
    // ili neki drugi mehanizam za praćenje kupovina
    
    $purchase = get_row("
        SELECT o.id
        FROM orders o
        JOIN order_items oi ON o.id = oi.order_id
        WHERE o.user_id = ? AND oi.product_id = ? AND o.status IN ('completed', 'shipped', 'delivered')
        LIMIT 1
    ", [$user_id, $product_id]);
    
    return !empty($purchase);
}