<?php
/**
 * তজিয়া গ্রুপ — Site Configuration
 */
if (session_status() === PHP_SESSION_NONE) session_start();
require_once __DIR__ . '/database.php';

define('SITE_NAME', 'তজিয়া গ্রুপ');
define('SITE_URL', 'http://localhost/tojiya-group');
define('SITE_DESC', 'পালিয়ে বিয়ে করা কাপলদের ভাইরাল আর্কাইভ');
define('UPLOAD_DIR', dirname(__DIR__) . '/uploads/');
define('UPLOAD_URL', SITE_URL . '/uploads/');
define('ITEMS_PER_PAGE', 12);
define('MAX_FILE_SIZE', 10 * 1024 * 1024);
define('ALLOWED_IMAGE_TYPES', ['image/jpeg','image/png','image/gif','image/webp']);
define('ALLOWED_VIDEO_TYPES', ['video/mp4','video/webm']);

function generateCSRFToken(): string {
    if (empty($_SESSION['csrf_token'])) {
        $_SESSION['csrf_token'] = bin2hex(random_bytes(32));
    }
    return $_SESSION['csrf_token'];
}
function verifyCSRFToken(?string $token): bool {
    return $token !== null && hash_equals($_SESSION['csrf_token'] ?? '', $token);
}
function e(?string $str): string {
    return htmlspecialchars($str ?? '', ENT_QUOTES, 'UTF-8');
}
function uploadFile(array $file, string $subDir = 'couples'): ?string {
    if ($file['error'] !== UPLOAD_ERR_OK || $file['size'] > MAX_FILE_SIZE) return null;
    $mime = mime_content_type($file['tmp_name']);
    $isImage = in_array($mime, ALLOWED_IMAGE_TYPES);
    $isVideo = in_array($mime, ALLOWED_VIDEO_TYPES);
    if (!$isImage && !$isVideo) return null;
    $ext = strtolower(pathinfo($file['name'], PATHINFO_EXTENSION));
    if (!$ext) $ext = $isImage ? 'jpg' : 'mp4';
    $filename = uniqid('tg_', true) . '.' . $ext;
    $targetDir = UPLOAD_DIR . $subDir . '/';
    if (!is_dir($targetDir)) mkdir($targetDir, 0755, true);
    if (move_uploaded_file($file['tmp_name'], $targetDir . $filename)) {
        return $subDir . '/' . $filename;
    }
    return null;
}
function getSetting(string $key, string $default = ''): string {
    static $cache = [];
    if (isset($cache[$key])) return $cache[$key];
    try {
        $stmt = getDB()->prepare("SELECT setting_value FROM settings WHERE setting_key = ?");
        $stmt->execute([$key]);
        $val = $stmt->fetchColumn();
        $cache[$key] = $val !== false ? $val : $default;
        return $cache[$key];
    } catch (Exception $e) { return $default; }
}
function bnDate(?string $date): string {
    if (!$date) return 'অজানা';
    $en = ['0','1','2','3','4','5','6','7','8','9'];
    $bn = ['০','১','২','৩','৪','৫','৬','৭','৮','৯'];
    $months = [1=>'জানুয়ারি','ফেব্রুয়ারি','মার্চ','এপ্রিল','মে','জুন','জুলাই','আগস্ট','সেপ্টেম্বর','অক্টোবর','নভেম্বর','ডিসেম্বর'];
    $ts = strtotime($date);
    if (!$ts) return 'অজানা';
    $d = str_replace($en, $bn, date('d', $ts));
    $m = $months[(int)date('m', $ts)] ?? '';
    $y = str_replace($en, $bn, date('Y', $ts));
    return "$d $m, $y";
}
function bnNum($num): string {
    $en = ['0','1','2','3','4','5','6','7','8','9'];
    $bn = ['০','১','২','৩','৪','৫','৬','৭','৮','৯'];
    return str_replace($en, $bn, (string)$num);
}
function bnTimeAgo(string $datetime): string {
    $diff = time() - strtotime($datetime);
    if ($diff < 60) return 'এইমাত্র';
    if ($diff < 3600) return bnNum(floor($diff/60)) . ' মিনিট আগে';
    if ($diff < 86400) return bnNum(floor($diff/3600)) . ' ঘণ্টা আগে';
    if ($diff < 2592000) return bnNum(floor($diff/86400)) . ' দিন আগে';
    if ($diff < 31536000) return bnNum(floor($diff/2592000)) . ' মাস আগে';
    return bnNum(floor($diff/31536000)) . ' বছর আগে';
}
function truncate(?string $text, int $length = 100): string {
    if (!$text) return '';
    return mb_strlen($text) <= $length ? $text : mb_substr($text, 0, $length) . '...';
}
function getDistricts(): array {
    return ['ঢাকা','চট্টগ্রাম','রাজশাহী','খুলনা','বরিশাল','সিলেট','রংপুর','ময়মনসিংহ',
        'কুমিল্লা','গাজীপুর','নারায়ণগঞ্জ','টাঙ্গাইল','কিশোরগঞ্জ','মানিকগঞ্জ','মুন্সিগঞ্জ',
        'নরসিংদী','ফরিদপুর','গোপালগঞ্জ','মাদারীপুর','শরীয়তপুর','রাজবাড়ী',
        'ফেনী','লক্ষ্মীপুর','নোয়াখালী','চাঁদপুর','ব্রাহ্মণবাড়িয়া',
        'কক্সবাজার','রাঙ্গামাটি','খাগড়াছড়ি','বান্দরবান',
        'বগুড়া','জয়পুরহাট','নওগাঁ','নাটোর','চাঁপাইনবাবগঞ্জ','পাবনা','সিরাজগঞ্জ',
        'বাগেরহাট','ঝিনাইদহ','যশোর','কুষ্টিয়া','মাগুরা','মেহেরপুর','নড়াইল','সাতক্ষীরা',
        'ভোলা','ঝালকাঠি','পটুয়াখালী','পিরোজপুর','বরগুনা',
        'হবিগঞ্জ','মৌলভীবাজার','সুনামগঞ্জ',
        'দিনাজপুর','গাইবান্ধা','কুড়িগ্রাম','লালমনিরহাট','নীলফামারী','পঞ্চগড়','ঠাকুরগাঁও',
        'জামালপুর','নেত্রকোনা','শেরপুর'];
}
function getYouTubeId(?string $url): ?string {
    if (!$url) return null;
    preg_match('/(?:youtube\.com\/(?:watch\?v=|embed\/|shorts\/)|youtu\.be\/)([a-zA-Z0-9_-]{11})/', $url, $m);
    return $m[1] ?? null;
}
