<?php
/**
 * Pomoćne funkcije za product stranu
 * 
 * Svaka funkcija je definisana samo ako već ne postoji u sistemu
 */

if (!function_exists('clean_slug')) {
    /**
     * Čisti slug od neželjenih karaktera
     *
     * @param string $slug Slug koji treba očistiti
     * @return string Očišćeni slug
     */
    function clean_slug($slug) {
        $slug = trim($slug);
        $slug = preg_replace('/[^a-zA-Z0-9\-_]/', '', $slug);
        $slug = strtolower($slug);
        return $slug;
    }
}

if (!function_exists('get_product_images')) {
    /**
     * Dohvata slike proizvoda
     *
     * @param int $product_id ID proizvoda
     * @return array Niz slika proizvoda
     */
    function get_product_images($product_id) {
        return get_rows("SELECT * FROM product_images WHERE product_id = ? ORDER BY sort_order ASC", [$product_id]);
    }
}

if (!function_exists('get_product_categories')) {
    /**
     * Dohvata kategorije proizvoda
     *
     * @param int $product_id ID proizvoda
     * @return array Niz kategorija kojima proizvod pripada
     */
    function get_product_categories($product_id) {
        return get_rows("
            SELECT c.id, c.name, c.slug 
            FROM categories c 
            JOIN product_categories pc ON c.id = pc.category_id 
            WHERE pc.product_id = ?
        ", [$product_id]);
    }
}

if (!function_exists('get_product_reviews')) {
    /**
     * Dohvata recenzije proizvoda
     *
     * @param int $product_id ID proizvoda
     * @param string $status Status recenzija koje se dohvataju (npr. 'approved')
     * @return array Niz recenzija proizvoda
     */
    function get_product_reviews($product_id, $status = null) {
        $query = "
            SELECT r.*, u.name as user_name 
            FROM reviews r 
            LEFT JOIN users u ON r.user_id = u.id 
            WHERE r.product_id = ?
        ";
        
        $params = [$product_id];
        
        if ($status) {
            $query .= " AND r.status = ?";
            $params[] = $status;
        }
        
        $query .= " ORDER BY r.created_at DESC";
        
        return get_rows($query, $params);
    }
}

// NE DEKLARIŠEMO get_product_faqs JER VEĆ POSTOJI
// Ako trebate koristiti ovu funkciju, ona će biti dostupna iz functions.php

if (!function_exists('table_exists')) {
    /**
     * Proverava da li tabela postoji u bazi
     *
     * @param string $table_name Naziv tabele
     * @return bool True ako tabela postoji, false inače
     */
    function table_exists($table_name) {
        global $conn;
        try {
            $result = $conn->query("SHOW TABLES LIKE '$table_name'");
            return $result->rowCount() > 0;
        } catch(PDOException $e) {
            return false;
        }
    }
}

if (!function_exists('get_frequently_bought_together')) {
    /**
     * Dohvata proizvode koji se najčešće kupuju zajedno sa određenim proizvodom
     *
     * @param int $product_id ID proizvoda
     * @param int $limit Maksimalan broj proizvoda
     * @return array Niz srodnih proizvoda
     */
    function get_frequently_bought_together($product_id, $limit = 3) {
        // Ako imate tabelu za frequently bought together, koristite nju
        // Inače, koristimo related products kao fallback
        return get_related_products($product_id, $limit);
    }
}

if (!function_exists('get_shipping_methods')) {
    /**
     * Dohvata dostupne načine dostave
     *
     * @return array Niz načina dostave
     */
    function get_shipping_methods() {
        // Ovo bi trebalo da dohvata iz baze ako imate tabelu za načine dostave
        // Za sada vraćamo hardkodirane vrednosti
        return [
            [
                'id' => 1,
                'name' => 'Besplatna dostava',
                'description' => 'Isporuka u roku od 2-3 radna dana',
                'price' => 0,
                'is_default' => true
            ],
            [
                'id' => 2,
                'name' => 'Lično preuzimanje',
                'description' => 'Oskara Daviča 2, Kragujevac (Pon-Pet: 09-17h, Sub: 09-14h)',
                'price' => 0,
                'is_default' => false
            ]
        ];
    }
}

if (!function_exists('get_payment_methods')) {
    /**
     * Dohvata dostupne načine plaćanja
     *
     * @return array Niz načina plaćanja
     */
    function get_payment_methods() {
        // Ovo bi trebalo da dohvata iz baze ako imate tabelu za načine plaćanja
        // Za sada vraćamo hardkodirane vrednosti
        return [
            [
                'id' => 1,
                'name' => 'Kartica',
                'description' => 'Plaćanje karticom - do 12 rata bez kamate',
                'is_default' => true
            ],
            [
                'id' => 2,
                'name' => 'Gotovina',
                'description' => 'Plaćanje gotovinom prilikom preuzimanja - popust 5%',
                'is_default' => false
            ],
            [
                'id' => 3,
                'name' => 'Čekovi',
                'description' => 'Plaćanje čekovima građana - do 6 mesečnih rata',
                'is_default' => false
            ]
        ];
    }
}

if (!function_exists('calculate_average_rating')) {
    /**
     * Izračunava prosečnu ocenu proizvoda
     *
     * @param array $product Podaci o proizvodu
     * @return float Prosečna ocena proizvoda
     */
    function calculate_average_rating($product) {
        if (!isset($product['rating_count']) || $product['rating_count'] <= 0) {
            return 0;
        }
        
        return round($product['rating_sum'] / $product['rating_count'], 1);
    }
}

if (!function_exists('calculate_discount_percent')) {
    /**
     * Izračunava procenat popusta
     *
     * @param array $product Podaci o proizvodu
     * @return int Procenat popusta
     */
    function calculate_discount_percent($product) {
        if (empty($product['sale_price']) || $product['price'] <= 0) {
            return 0;
        }
        
        return round((($product['price'] - $product['sale_price']) / $product['price']) * 100);
    }
}

if (!function_exists('calculate_discount_percent_value')) {
    /**
     * Ista funkcija ali za related proizvode
     */
    function calculate_discount_percent_value($product) {
        return calculate_discount_percent($product);
    }
}

if (!function_exists('get_rating_distribution')) {
    /**
     * Dohvata distribuciju ocena
     *
     * @param int $product_id ID proizvoda
     * @return array Distribucija ocena (1-5)
     */
    function get_rating_distribution($product_id) {
        $reviews = get_product_reviews($product_id, 'approved');
        $distribution = [
            1 => 0,
            2 => 0,
            3 => 0,
            4 => 0,
            5 => 0
        ];
        
        foreach ($reviews as $review) {
            if (isset($review['rating']) && $review['rating'] >= 1 && $review['rating'] <= 5) {
                $distribution[$review['rating']]++;
            }
        }
        
        return $distribution;
    }
}

if (!function_exists('get_product_stock_status')) {
    /**
     * Proverava stanje zaliha proizvoda
     *
     * @param array $product Podaci o proizvodu
     * @return array Informacije o stanju zaliha
     */
    function get_product_stock_status($product) {
        $result = [
            'available' => true,
            'limited' => false,
            'count' => 999,
            'class' => 'available',
            'label' => 'DOSTUPNO'
        ];
        
        if (isset($product['stock'])) {
            $result['count'] = $product['stock'];
            
            if ($product['stock'] <= 0) {
                $result['available'] = false;
                $result['class'] = 'unavailable';
                $result['label'] = 'TRENUTNO NEDOSTUPNO';
            } elseif ($product['stock'] <= 5) {
                $result['limited'] = true;
                $result['class'] = 'limited';
                $result['label'] = 'OGRANIČENA KOLIČINA';
            }
        }
        
        return $result;
    }
}

if (!function_exists('get_recent_product_sales')) {
    /**
     * Dohvata broj nedavnih prodaja proizvoda
     *
     * @param int $product_id ID proizvoda
     * @return int Broj nedavnih prodaja
     */
    function get_recent_product_sales($product_id) {
        // Ovo bi trebalo da dohvata stvarne podatke iz tabele sa porudžbinama
        // Za sada vraćamo nasumičan broj između 3 i 15 kao primer
        return rand(3, 15);
    }
}

if (!function_exists('generate_product_meta_title')) {
    /**
     * Generiše meta naslov za proizvod
     *
     * @param array $product Podaci o proizvodu
     * @param array $categories Kategorije proizvoda
     * @return string Meta naslov
     */
    function generate_product_meta_title($product, $categories) {
        $title = $product['name'];
        
        // Dodaj ime kategorije ako postoji
        if (!empty($categories)) {
            $title .= ' - ' . $categories[0]['name'];
        }
        
        // Dodaj ime sajta
        $title .= ' | ' . get_setting('site_name', 'Hugong aparati');
        
        return $title;
    }
}

if (!function_exists('generate_product_meta_description')) {
    /**
     * Generiše meta opis za proizvod
     *
     * @param array $product Podaci o proizvodu
     * @param int $discount_percent Procenat popusta
     * @return string Meta opis
     */
    function generate_product_meta_description($product, $discount_percent) {
        $description = 'Kupite ' . $product['name'];
        
        // Dodaj info o popustu ako postoji
        if ($discount_percent > 0) {
            $description .= ' sa popustom od ' . $discount_percent . '%';
        }
        
        // Dodaj cenu
        $price = !empty($product['sale_price']) ? $product['sale_price'] : $product['price'];
        $description .= '. Cena samo ' . number_format($price, 0, ',', '.') . ' RSD';
        
        // Dodaj kratki opis ako postoji
        if (!empty($product['short_description'])) {
            $short_desc = strip_tags($product['short_description']);
            $short_desc = mb_substr($short_desc, 0, 100);
            $description .= '. ' . $short_desc . '...';
        }
        
        // Dodaj informacije o garanciji i dostavi
        $description .= ' Besplatna isporuka, garancija 25 meseci.';
        
        return $description;
    }
}

if (!function_exists('get_canonical_product_url')) {
    /**
     * Generiše kanonički URL za proizvod
     *
     * @param string $product_slug Slug proizvoda
     * @return string Kanonički URL
     */
    function get_canonical_product_url($product_slug) {
        return SITE_URL . '/' . $product_slug;
    }
}

if (!function_exists('generate_breadcrumb_hierarchy')) {
    /**
     * Generiše hijerarhiju breadcrumbs za proizvod
     *
     * @param array $product Podaci o proizvodu
     * @param array $categories Kategorije proizvoda
     * @return array Hijerarhija breadcrumbs
     */
    function generate_breadcrumb_hierarchy($product, $categories) {
        $hierarchy = [];
        
        foreach ($categories as $category) {
            $hierarchy[] = [
                'name' => $category['name'],
                'url' => '/' . $category['slug']
            ];
        }
        
        return $hierarchy;
    }
}

if (!function_exists('generate_product_structured_data')) {
    /**
     * Generiše strukturirane podatke za proizvod
     *
     * @param array $product Podaci o proizvodu
     * @param array $images Slike proizvoda
     * @param array $reviews Recenzije proizvoda
     * @param float $average_rating Prosečna ocena
     * @param array $specifications Specifikacije proizvoda
     * @return array Strukturirani podaci za JSON-LD
     */
    function generate_product_structured_data($product, $images, $reviews, $average_rating, $specifications) {
        $current_price = !empty($product['sale_price']) ? $product['sale_price'] : $product['price'];
        
        $data = [
            '@context' => 'https://schema.org/',
            '@type' => 'Product',
            'name' => $product['name'],
            'image' => [],
            'description' => strip_tags($product['short_description']),
            'sku' => $product['sku'],
            'brand' => [
                '@type' => 'Brand',
                'name' => 'Hugong'
            ],
            'offers' => [
                '@type' => 'Offer',
                'url' => get_canonical_product_url($product['slug']),
                'priceCurrency' => 'RSD',
                'price' => $current_price,
                'priceValidUntil' => date('Y-m-d', strtotime('+1 year')),
                'availability' => 'https://schema.org/' . (get_product_stock_status($product)['available'] ? 'InStock' : 'OutOfStock'),
                'itemCondition' => 'https://schema.org/NewCondition'
            ]
        ];
        
        // Dodaj slike
        foreach ($images as $image) {
            $data['image'][] = UPLOADS_URL . '/products/' . $image['image'];
        }
        
        // Dodaj ocene ako postoje
        if ($average_rating > 0 && !empty($reviews)) {
            $data['aggregateRating'] = [
                '@type' => 'AggregateRating',
                'ratingValue' => $average_rating,
                'reviewCount' => count($reviews)
            ];
        }
        
        return $data;
    }
}

if (!function_exists('calculate_fbt_total')) {
    /**
     * Izračunava ukupnu cenu za "često se kupuje zajedno" sekciju
     *
     * @param array $main_product Glavni proizvod
     * @param array $related_products Srodni proizvodi
     * @return float Ukupna cena
     */
    function calculate_fbt_total($main_product, $related_products) {
        $total = !empty($main_product['sale_price']) ? $main_product['sale_price'] : $main_product['price'];
        
        foreach ($related_products as $product) {
            $total += !empty($product['sale_price']) ? $product['sale_price'] : $product['price'];
        }
        
        return $total;
    }
}

if (!function_exists('get_review_text')) {
    /**
     * Vraca gramaticki pravilan tekst za prikaz broja recenzija
     *
     * @param int $count Broj recenzija
     * @return string Tekst (ocena, ocene, ocena)
     */
    function get_review_text($count) {
        if ($count % 10 == 1 && $count % 100 != 11) {
            return 'ocena';
        } elseif (($count % 10 >= 2 && $count % 10 <= 4) && 
                  ($count % 100 < 12 || $count % 100 > 14)) {
            return 'ocene';
        } else {
            return 'ocena';
        }
    }
}