<?php
if (!session_id()) {
    session_start();
}

define('APP_NAME', 'Excellent Blog');
define('APP_VERSION', '1.0.0');
define('APP_URL', 'http://localhost:8480');

define('DB_HOST', $_ENV['MYSQL_HOST'] ?? 'db');
define('DB_NAME', $_ENV['MYSQL_DATABASE'] ?? 'excellent_blog');
define('DB_USER', $_ENV['MYSQL_USER'] ?? 'blog_user');
define('DB_PASS', $_ENV['MYSQL_PASSWORD'] ?? 'blog_pass');
define('DB_PORT', $_ENV['MYSQL_PORT'] ?? '3306');

define('GPT_API_KEY', $_ENV['GPT_API_KEY'] ?? '');
define('GPT_API_URL', 'https://api.openai.com/v1/chat/completions');

define('UPLOAD_PATH', __DIR__ . '/../assets/uploads/');
define('UPLOAD_URL', APP_URL . '/assets/uploads/');

define('DEFAULT_LANGUAGE', 'en');
define('SUPPORTED_LANGUAGES', [
    'en' => 'English',
    'zh-TW' => '繁體中文',
    'zh-CN' => '简体中文',
    'ja' => '日本語',
    'vi' => 'Tiếng Việt',
    'ms' => 'Bahasa Melayu'
]);

date_default_timezone_set('Asia/Taipei');

require_once __DIR__ . '/database.php';
require_once __DIR__ . '/../classes/Auth.php';
require_once __DIR__ . '/../classes/Article.php';
require_once __DIR__ . '/../classes/Category.php';
require_once __DIR__ . '/../classes/Language.php';
require_once __DIR__ . '/../classes/Settings.php';
require_once __DIR__ . '/../classes/GPTClient.php';
require_once __DIR__ . '/../classes/Crawler.php';
require_once __DIR__ . '/../classes/Publisher.php';
require_once __DIR__ . '/../classes/Chat.php';

function loadLanguage($lang = null) {
    if ($lang === null) {
        $lang = $_SESSION['language'] ?? DEFAULT_LANGUAGE;
    }

    $langFile = __DIR__ . "/../languages/{$lang}.php";
    if (file_exists($langFile)) {
        return include $langFile;
    }

    return include __DIR__ . "/../languages/en.php";
}

function __($key, $lang = null) {
    static $translations = [];

    if (empty($translations)) {
        $translations = loadLanguage($lang);
    }

    return $translations[$key] ?? $key;
}

function redirect($url) {
    header("Location: $url");
    exit();
}

function formatBytes($bytes, $precision = 2) {
    $units = array('B', 'KB', 'MB', 'GB', 'TB');

    for ($i = 0; $bytes > 1024 && $i < count($units) - 1; $i++) {
        $bytes /= 1024;
    }

    return round($bytes, $precision) . ' ' . $units[$i];
}

function json_response($data, $status = 200) {
    http_response_code($status);
    header('Content-Type: application/json');
    echo json_encode($data);
    exit();
}

function sanitize_input($data) {
    return htmlspecialchars(strip_tags(trim($data)));
}

function generate_slug($text) {
    $text = preg_replace('/[^\p{L}\p{Nd}]+/u', '-', $text);
    $text = strtolower(trim($text, '-'));
    return $text;
}

function format_date($date, $format = 'Y-m-d H:i:s') {
    return date($format, strtotime($date));
}
?>