<?php

define('ROOT', dirname(__FILE__));

// Environment detection
define('IS_DEVELOPMENT', 
    isset($_SERVER['SERVER_NAME']) && 
    in_array($_SERVER['SERVER_NAME'], ['localhost', '127.0.0.1', 'ufc.localhost'])
);

// Base path for assets and URLs - detect subdirectory
$scriptDir = dirname($_SERVER['SCRIPT_NAME']);
define('BASE_PATH', ''); // Hardcoded to '' for https://ufc.lil.ge

// Error reporting based on environment
if (IS_DEVELOPMENT) {
    error_reporting(E_ALL);
    ini_set('display_errors', 1);
    ini_set('display_startup_errors', 1);
} else {
    // Temporary: Display errors for debugging on server
    error_reporting(E_ALL);
    ini_set('display_errors', 1);
    ini_set('display_startup_errors', 1);
    ini_set('log_errors', 1);
    ini_set('error_log', ROOT . '/logs/php_errors.log');
}

require_once __DIR__.'/vendor/autoload.php';

use app\components\SessionManager;
use app\components\SecurityHeaders;
use app\components\ErrorHandler;
use app\controllers\AppController;
use app\controllers\DashboardController;
use app\controllers\AccountController;
use app\controllers\ContactController;
use app\controllers\AboutController;
use app\controllers\MapController;
use app\controllers\ServiceController;
use app\controllers\NewsController;
use app\controllers\AdviceController;
use app\controllers\AdminNewsController;
use app\controllers\AdminServiceController;
use app\controllers\AdminMapController;
use app\controllers\AdminTipsController;
use app\controllers\AdminPaginationController;
use app\controllers\AdminAboutusController;
use app\controllers\AdminClientController;
use app\controllers\AdminPartnerController;
use app\controllers\AdminOffersController;
use app\controllers\AdminContactController;
use app\controllers\AdminSmtpController;
use app\controllers\AdminFooterController;
use app\controllers\AdminMetaTagsController;
use app\controllers\AdminScriptUpdateController;
use app\controllers\AdminAnonymController;
use app\controllers\AdminCounterController;
use app\controllers\AdminSecurityController;
use app\controllers\AdminDocController;
use app\controllers\AdminPageController;
use app\controllers\PageController;
use app\controllers\AdminLanguageController;
use app\controllers\AdminTranslationsController;
use app\controllers\AdminThemeController;
use app\Router;

// Global exception handler
set_exception_handler(function (\Throwable $exception) {
    ErrorHandler::handleException($exception);
});

// Global error handler (convert errors to exceptions)
set_error_handler(function ($severity, $message, $file, $line) {
    // Don't throw for suppressed errors (@)
    if (!(error_reporting() & $severity)) {
        return false;
    }
    // Only throw for fatal errors
    if ($severity & (E_ERROR | E_PARSE | E_CORE_ERROR | E_COMPILE_ERROR | E_USER_ERROR | E_RECOVERABLE_ERROR)) {
        throw new \ErrorException($message, 0, $severity, $file, $line);
    }
    // For warnings and notices, just log
    error_log("PHP $severity: $message in $file on line $line");
    return false;
});

// Initialize secure session
SessionManager::initSecureSession();

// Set security headers
SecurityHeaders::set();

// Create logs directory if it doesn't exist
$logsDir = ROOT . '/logs';
if (!is_dir($logsDir)) {
    mkdir($logsDir, 0755, true);
}

$database = null;
try {
    $database = new \app\Database();
} catch (\Exception $e) {
    error_log("Database connection failed: " . $e->getMessage());
    die("Database connection failed. Please check your database configuration.");
}

$language = null;
try {
    $language = new \app\Language();
} catch (\Exception $e) {
    error_log("Language initialization failed: " . $e->getMessage());
    die("Language initialization failed.");
}

$router = null;
try {
    $router = new Router($database,$language);
} catch (\Exception $e) {
    error_log("Router initialization failed: " . $e->getMessage());
    die("Router initialization failed.");
}



//articles დასაწყისი

$router->get('/', [AppController::class, 'app']);
$router->post('/aboutusdatafront', [AppController::class, 'aboutusdatafront']);
$router->get('/aboutusdatafrontmenu', [AppController::class, 'aboutusdatafrontmenu']); // Test GET route
$router->post('/aboutusdatafrontmenu', [AppController::class, 'aboutusdatafrontmenu']); // Added for menu AJAX - test
$router->post('/offersdatafront', [AppController::class, 'offersdatafront']);
$router->post('/clientsdatafront', [AppController::class, 'clientsdatafront']);
$router->post('/partnersdatafront', [AppController::class, 'partnersdatafront']);
$router->post('/selectinfo', [AppController::class, 'selectinfo']);
$router->post('/appcounter', [AppController::class, 'appcounter']);
$router->get('/api/translations/public', [AppController::class, 'translationspublic']);

//articles დასასრული

//account დასაწყისი
$router->get('/admin', [AccountController::class, 'admin']);
$router->get('/account/login', [AccountController::class, 'admin']);
$router->get('/account/register', [AccountController::class, 'register']);
$router->post('/account/checkuserinfo', [AccountController::class, 'checkuserinfo']);
$router->get('/logout', [AccountController::class, 'logout']);
$router->get('/blockpage', [AccountController::class, 'blockpage']);
$router->post('/checkPassword', [AccountController::class, 'checkPassword']);
$router->post('/checkUser', [AccountController::class, 'checkUser']);
$router->post('/profileParams', [AccountController::class, 'profileParams']);
//account დასასრული


//contat დასაწყისი
$router->get('/pagecontact', [ContactController::class, 'pagecontact']);
$router->post('/contactsend', [ContactController::class, 'contactsend']);

//contat დასასრული

//about დასაწყისი
$router->get('/about', [AboutController::class, 'index']);
$router->post('/aboutusdatafront', [AboutController::class, 'aboutusdatafront']);
$router->post('/aboutusdatafrontmenu', [AboutController::class, 'aboutusdatafrontmenu']);
//about დასასრული

//map დასაწყისი
$router->get('/map', [MapController::class, 'index']);
$router->post('/getCoordinates', [MapController::class, 'getCoordinates']);
$router->post('/insertcoordinate', [MapController::class, 'insertcoordinate']);
$router->post('/changelanguage', [MapController::class, 'changelanguage']);
//map დასასრული

//contact დასაწყისი
$router->get('/contact', [ContactController::class, 'index']);
$router->post('/sendcontact', [ContactController::class, 'sendcontact']);
$router->get('/anonymousdisclosure', [ContactController::class, 'anonymousdisclosure']);
$router->get('/anonymousdisclosure_form', [ContactController::class, 'anonymousdisclosure_form']);
$router->post('/anonymousdisclosure_form', [ContactController::class, 'anonymousdisclosure_form']);
$router->post('/anonymemailsend', [ContactController::class, 'anonymemailsend']);
//contact დასასრული

//service დასაწყისი
$router->get('/service', [ServiceController::class, 'index']);
$router->get('/services', [ServiceController::class, 'index']); // Alias for dropdown
$router->get('/doc', [ServiceController::class, 'doc']); // სისტემაში მონაწილეობა
$router->post('/servicedatafront', [ServiceController::class, 'servicedatafront']);
//service დასასრული

//news დასაწყისი
$router->get('/news', [NewsController::class, 'index']);
$router->post('/newsdatafront', [NewsController::class, 'newsdatafront']);
$router->get('/infonews', [NewsController::class, 'infonews']);
//news დასასრული

//advice დასაწყისი
$router->get('/advice', [AdviceController::class, 'index']);
$router->post('/advicedata', [AdviceController::class, 'advicedata']);
$router->get('/infoadvice', [AdviceController::class, 'infoadvice']);
//advice დასასრული

//Dashboard ადმინის მხარე დასაწყისი

$router->get('/dashboard', [DashboardController::class, 'index']);
$router->get('/admin/dashboard', [DashboardController::class, 'index']);
$router->post('/dashboard', [DashboardController::class, 'dashboardContent']);
$router->post('/admin/dashboard', [DashboardController::class, 'dashboardContent']);
$router->post('/checkadminappusersession', [DashboardController::class, 'checkadminappusersession']);
$router->get('/csrf-token', [DashboardController::class, 'getCsrfToken']);
$router->post('/admin/keepalive', [DashboardController::class, 'keepAlive']);

//Dashboard ადმინის მხარე დასასრული


//AdminNews ადმინის მხარე დასაწყისი
$router->post('/newsindex', [AdminNewsController::class, 'index']);
$router->post('/newsdata', [AdminNewsController::class, 'newsdata']);
$router->post('/insertNewsdata', [AdminNewsController::class, 'insertNewsdata']);
$router->post('/newsdataedit', [AdminNewsController::class, 'newsdataedit']);
$router->post('/newsdatadelete', [AdminNewsController::class, 'newsdatadelete']);
$router->post('/newsDataAddForm', [AdminNewsController::class, 'newsDataAddForm']);
$router->post('/updatenewsActive', [AdminNewsController::class, 'updatenewsActive']);
$router->post('/newssortupdate', [AdminNewsController::class, 'updateNewsSortOrder']);
//AdminNews ადმინის მხარე დასასრული

//AdminService ადმინის მხარე დასაწყისი
$router->post('/serviceindex', [AdminServiceController::class, 'index']);
$router->post('/servicesdata', [AdminServiceController::class, 'servicesdata']);
$router->post('/servicesdatainsert', [AdminServiceController::class, 'servicesdatainsert']);
$router->post('/servicesdataedit', [AdminServiceController::class, 'servicesdataedit']);
$router->post('/servicesDataAddForm', [AdminServiceController::class, 'servicesDataAddForm']);
$router->post('/servicedatadelete', [AdminServiceController::class, 'servicedatadelete']);
$router->post('/selectsort', [AdminServiceController::class, 'selectsort']);
//AdminService ადმინის მხარე დასასრული

//AdminMap ადმინის მხარე დასაწყისი
$router->post('/mapindex', [AdminMapController::class, 'index']);
$router->post('/mapsdata', [AdminMapController::class, 'mapsdata']);
$router->post('/mapsdatainsert', [AdminMapController::class, 'mapsdatainsert']);
$router->post('/bankdatainsert', [AdminMapController::class, 'bankdatainsert']);
$router->post('/mapsdataedit', [AdminMapController::class, 'mapsdataedit']);
$router->post('/mapsDataAddForm', [AdminMapController::class, 'mapsDataAddForm']);
$router->post('/bankDataAddForm', [AdminMapController::class, 'bankDataAddForm']);
$router->post('/mapsdatadelete', [AdminMapController::class, 'mapsdatadelete']);
$router->post('/getcoords', [AdminMapController::class, 'getcoords']);
$router->post('/opensvg', [AdminMapController::class, 'opensvg']);
$router->post('/selectBankName', [AdminMapController::class, 'selectBankName']);
$router->post('/deletebank', [AdminMapController::class, 'deletebank']);
$router->post('/editforbank', [AdminMapController::class, 'editforbank']);
$router->post('/changestatus', [AdminMapController::class, 'changestatus']);
//AdminMap ადმინის მხარე დასასრული

//Tips ადმინის მხარე დასაწყისი
$router->post('/tipsindex', [AdminTipsController::class, 'index']);
$router->post('/tipsdata', [AdminTipsController::class, 'tipsdata']);
$router->post('/tipsDataAddForm', [AdminTipsController::class, 'tipsDataAddForm']);
$router->post('/insertTipsdata', [AdminTipsController::class, 'insertTipsdata']);
$router->post('/tipsdatadelete', [AdminTipsController::class, 'tipsdatadelete']);
$router->post('/tipsdataedit', [AdminTipsController::class, 'tipsdataedit']);
$router->post('/updatetipsActive', [AdminTipsController::class, 'updatetipsActive']);
$router->post('/tipssortupdate', [AdminTipsController::class, 'updateTipsSortOrder']);
//Tips ადმინის მხარე დასასრული

//aboutus ადმინის მხარე დასაწყისი
$router->post('/aboutusindex', [AdminAboutusController::class, 'index']);
$router->post('/aboutusdata', [AdminAboutusController::class, 'aboutusdata']);
$router->post('/aboutusDataAddForm', [AdminAboutusController::class, 'aboutusDataAddForm']);
$router->post('/insertaboutusdata', [AdminAboutusController::class, 'insertaboutusdata']);
$router->post('/aboutusdatadelete', [AdminAboutusController::class, 'aboutusdatadelete']);
$router->post('/aboutusdataedit', [AdminAboutusController::class, 'aboutusdataedit']);
$router->post('/aboutussortupdate', [AdminAboutusController::class, 'updateAboutusSortOrder']);
//aboutus ადმინის მხარე დასასრული

//pagination დასაწყისი
$router->post('/pagination', [AdminPaginationController::class, 'pagination']);
//pagination დასასრული

//client დასაწყისი
$router->post('/clientindex', [AdminClientController::class, 'index']);
$router->post('/clientdata', [AdminClientController::class, 'clientdata']);
$router->post('/clientDataAddForm', [AdminClientController::class, 'clientDataAddForm']);
$router->post('/insertClientdata', [AdminClientController::class, 'insertClientdata']);
$router->post('/clientdataedit', [AdminClientController::class, 'clientdataedit']);
$router->post('/clientdatadelete', [AdminClientController::class, 'clientdatadelete']);
$router->post('/clientsortupdate', [AdminClientController::class, 'updateClientSortOrder']);
//client დასასრული


//Partner დასაწყისი
$router->post('/partnerindex', [AdminPartnerController::class, 'index']);
$router->post('/partnerdata', [AdminPartnerController::class, 'partnerdata']);
$router->post('/partnerDataAddForm', [AdminPartnerController::class, 'partnerDataAddForm']);
$router->post('/insertpartnerdata', [AdminPartnerController::class, 'insertpartnerdata']);
$router->post('/partnerdataedit', [AdminPartnerController::class, 'partnerdataedit']);
$router->post('/partnerdatadelete', [AdminPartnerController::class, 'partnerdatadelete']);
$router->post('/partnersortupdate', [AdminPartnerController::class, 'updatePartnerSortOrder']);
//Partner დასასრული


//Offers დასაწყისი
$router->post('/offersindex', [AdminOffersController::class, 'index']);
$router->post('/offersdata', [AdminOffersController::class, 'offersdata']);
$router->post('/offersDataAddForm', [AdminOffersController::class, 'offersDataAddForm']);
$router->post('/insertoffersdata', [AdminOffersController::class, 'insertoffersdata']);
$router->post('/offersdataedit', [AdminOffersController::class, 'offersdataedit']);
$router->post('/offersdatadelete', [AdminOffersController::class, 'offersdatadelete']);
$router->post('/offerssortupdate', [AdminOffersController::class, 'updateOffersSortOrder']);
//Offers დასასრული


//Contact დასაწყისი
$router->post('/contactindex', [AdminContactController::class, 'index']);
$router->post('/contactdata', [AdminContactController::class, 'contactdata']);
$router->post('/contactdatainsert', [AdminContactController::class, 'contactdatainsert']);
$router->post('/contactdataedit', [AdminContactController::class, 'contactdataedit']);
$router->post('/contactDataAddForm', [AdminContactController::class, 'contactDataAddForm']);
$router->post('/contactdatadelete', [AdminContactController::class, 'contactdatadelete']);
//Contact დასასრული


//SMTP დასაწყისი
$router->post('/smtpindex', [AdminSmtpController::class, 'index']);
$router->post('/addsmtp', [AdminSmtpController::class, 'addsmtp']);
$router->post('/sendMail', [AdminSmtpController::class, 'sendMail']);
//SMTP დასასრული

//Footer დასაწყისი
$router->post('/footerindex', [AdminFooterController::class, 'index']);
$router->post('/addfooter', [AdminFooterController::class, 'addfooter']);
$router->post('/deleteimg', [AdminFooterController::class, 'deleteimg']);
//Footer დასასრული

//MetaTags დასაწყისი
$router->post('/metatagindex', [AdminMetaTagsController::class, 'index']);
$router->post('/metatagsave', [AdminMetaTagsController::class, 'metatagsave']);
//MetaTags დასასრული

//Theme დასაწყისი
$router->post('/themeindex', [AdminThemeController::class, 'index']);
$router->post('/themesave', [AdminThemeController::class, 'themesave']);
$router->post('/themeswitch', [AdminThemeController::class, 'themeswitch']);
$router->get('/gettheme', [AdminThemeController::class, 'gettheme']);
$router->get('/themes/getcolors', [AdminThemeController::class, 'getThemeColors']);
//Theme დასასრული

//Anonym დასაწყისი
$router->post('/anonymindex', [AdminAnonymController::class, 'index']);
$router->post('/anonymsave', [AdminAnonymController::class, 'anonymsave']);
//Anonym დასასრული

//Counter დასაწყისი
$router->post('/counterindex', [AdminCounterController::class, 'index']);
$router->post('/counterdata', [AdminCounterController::class, 'index']);
$router->post('/countersave', [AdminCounterController::class, 'countersave']);
//Counter დასასრული

//ScriptUpdate დასაწყისი
$router->post('/scriptupdateindex', [AdminScriptUpdateController::class, 'index']);
$router->post('/scriptupdatedata', [AdminScriptUpdateController::class, 'scriptupdatedata']);
//ScriptUpdate დასასრული

//Security დასაწყისი
$router->get('/admin/security', [AdminSecurityController::class, 'index']);
$router->get('/admin/security/events', [AdminSecurityController::class, 'events']);
$router->get('/admin/security/stats', [AdminSecurityController::class, 'stats']);
$router->post('/admin/security/export', [AdminSecurityController::class, 'export']);
$router->post('/admin/security/clear', [AdminSecurityController::class, 'clear']);
//Security დასასრული

//Doc Content დასაწყისი
$router->get('/admin/doc', [AdminDocController::class, 'index']);
$router->post('/admin/doc/items', [AdminDocController::class, 'getDocItems']);
$router->post('/admin/doc/add', [AdminDocController::class, 'addDocItem']);
$router->post('/admin/doc/update', [AdminDocController::class, 'updateDocItem']);
$router->post('/admin/doc/delete', [AdminDocController::class, 'deleteDocItem']);
$router->post('/admin/doc/sort', [AdminDocController::class, 'updateDocSort']);
$router->post('/admin/doc/upload', [AdminDocController::class, 'uploadFile']);
$router->post('/admin/doc/deletefile', [AdminDocController::class, 'deleteFile']);
//Doc Content დასასრული

//Pages დასაწყისი
$router->get('/admin/pages', [AdminPageController::class, 'index']);
$router->get('/admin/pages/list', [AdminPageController::class, 'getPages']);
$router->post('/admin/pages/add', [AdminPageController::class, 'addPage']);
$router->post('/admin/pages/update', [AdminPageController::class, 'updatePage']);
$router->post('/admin/pages/delete', [AdminPageController::class, 'deletePage']);
$router->post('/admin/pages/duplicate', [AdminPageController::class, 'duplicatePage']);
//Pages დასასრული

//Languages დასაწყისი
$router->get('/admin/languages', [AdminLanguageController::class, 'index']);
$router->get('/admin/languages/add', [AdminLanguageController::class, 'add']);
$router->post('/admin/languages/store', [AdminLanguageController::class, 'store']);
$router->get('/admin/languages/edit', [AdminLanguageController::class, 'edit']);
$router->post('/admin/languages/update', [AdminLanguageController::class, 'update']);
$router->get('/admin/languages/delete', [AdminLanguageController::class, 'delete']);
$router->get('/admin/languages/set-default', [AdminLanguageController::class, 'setDefault']);
$router->get('/admin/languages/toggle-status', [AdminLanguageController::class, 'toggleStatus']);
$router->get('/api/language/current', [AdminLanguageController::class, 'getCurrentLanguage']);
$router->post('/api/language/set', [AdminLanguageController::class, 'setCurrentLanguage']);
//Languages დასასრული

//Translations დასაწყისი
$router->get('/admin/translations', [AdminTranslationsController::class, 'index']);
$router->post('/admin/translations/get-data', [AdminTranslationsController::class, 'getData']);
$router->post('/admin/translations/store', [AdminTranslationsController::class, 'store']);
$router->post('/admin/translations/update', [AdminTranslationsController::class, 'update']);
$router->post('/admin/translations/update-cell', [AdminTranslationsController::class, 'updateCell']);
$router->get('/admin/translations/delete', [AdminTranslationsController::class, 'delete']);
$router->get('/api/translations', [AdminTranslationsController::class, 'getTranslations']);
$router->get('/api/translation/{id}', [AdminTranslationsController::class, 'getTranslation']);
$router->get('/api/translations/public', [AdminTranslationsController::class, 'getPublicTranslations']);
//Translations დასასრული

//Public page route
$router->get('/page/{slug}', [PageController::class, 'show']);

try {
    $router->run();
} catch (\Exception $e) {
    error_log("Router execution failed: " . $e->getMessage());
    die("Application error: " . $e->getMessage());
}