<?php
/**
 * نقطه ورود اصلی برنامه
 * Main Entry Point
 */

require_once __DIR__ . '/config/config.php';
require_once __DIR__ . '/config/database.php';

// Load Models
require_once __DIR__ . '/models/User.php';
require_once __DIR__ . '/models/Advertisement.php';
require_once __DIR__ . '/models/PrintDate.php';
require_once __DIR__ . '/models/Receipt.php';
require_once __DIR__ . '/models/Report.php';
require_once __DIR__ . '/models/ReceiptCounter.php';

// Load Utilities
require_once __DIR__ . '/utils/JWT.php';
require_once __DIR__ . '/utils/Response.php';
require_once __DIR__ . '/utils/Validator.php';

// Load Controllers
require_once __DIR__ . '/controllers/AuthController.php';
require_once __DIR__ . '/controllers/AdvertisementController.php';
require_once __DIR__ . '/controllers/PrintDateController.php';
require_once __DIR__ . '/controllers/ReceiptController.php';
require_once __DIR__ . '/controllers/ReportController.php';
require_once __DIR__ . '/controllers/UserController.php';

// Handle CORS - باید قبل از هر چیزی اجرا شود
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS');
header('Access-Control-Allow-Headers: Content-Type, Authorization');
header('Access-Control-Max-Age: 86400'); // 24 hours

// Handle preflight OPTIONS request
if ($_SERVER['REQUEST_METHOD'] === 'OPTIONS') {
    http_response_code(200);
    exit;
}

// دریافت متد و مسیر درخواست
$method = $_SERVER['REQUEST_METHOD'];
$path = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH);

// حذف base path اگر برنامه در زیرشاخه است
$basePath = '/backend-php'; // اگر در root هست این را خالی کنید: ''
if (strpos($path, $basePath) === 0) {
    $path = substr($path, strlen($basePath));
}

// حذف اسلش ابتدایی و انتهایی
$path = trim($path, '/');

// تبدیل مسیر به آرایه
$segments = $path ? explode('/', $path) : [];

// اتصال به دیتابیس
try {
    $database = new Database();
    $db = $database->getConnection();
} catch (Exception $e) {
    Response::serverError('خطا در اتصال به دیتابیس');
}

// روتینگ
try {
    // API Routes
    if (count($segments) > 0 && $segments[0] === 'api') {
        array_shift($segments); // حذف 'api' از ابتدا
        
        if (count($segments) === 0) {
            Response::success(['message' => 'Khabar Ads Manager API v1.0']);
        }
        
        $resource = $segments[0] ?? null;
        $id = $segments[1] ?? null;
        
        // Authentication Routes
        if ($resource === 'auth') {
            $controller = new AuthController($db);
            
            if ($id === 'login' && $method === 'POST') {
                $controller->login();
            } elseif ($id === 'register' && $method === 'POST') {
                $controller->register();
            } elseif ($id === 'me' && $method === 'GET') {
                $controller->me();
            } elseif ($id === 'logout' && $method === 'POST') {
                $controller->logout();
            } else {
                Response::notFound();
            }
        }
        
        // Advertisements Routes
        elseif ($resource === 'advertisements') {
            $controller = new AdvertisementController($db);
            
            if ($method === 'GET' && !$id) {
                $controller->index();
            } elseif ($method === 'GET' && $id) {
                $controller->show($id);
            } elseif ($method === 'POST') {
                $controller->store();
            } elseif ($method === 'PUT' && $id) {
                $controller->update($id);
            } elseif ($method === 'DELETE' && $id) {
                $controller->destroy($id);
            } else {
                Response::notFound();
            }
        }
        
        // Receipts Routes
        elseif ($resource === 'receipts') {
            $controller = new ReceiptController($db);
            
            if ($method === 'GET' && !$id) {
                $controller->index();
            } elseif ($method === 'GET' && $id) {
                $controller->show($id);
            } elseif ($method === 'POST') {
                $controller->store();
            } elseif ($method === 'DELETE' && $id) {
                $controller->destroy($id);
            } else {
                Response::notFound();
            }
        }
        
        // Print Dates Routes
        elseif ($resource === 'print-dates') {
            $controller = new PrintDateController($db);
            
            if ($method === 'GET' && $id) {
                // GET /api/print-dates/{advertisementId}
                $controller->index($id);
            } elseif ($method === 'POST') {
                $controller->store();
            } elseif ($method === 'DELETE' && $id) {
                $controller->destroy($id);
            } else {
                Response::notFound();
            }
        }
        
        // Reports Routes
        elseif ($resource === 'reports') {
            $controller = new ReportController($db);
            
            if ($id === 'summary' && $method === 'GET') {
                $controller->summary();
            } elseif ($id === 'by-issue-date' && $method === 'GET') {
                $controller->byIssueDate();
            } elseif ($id === 'top-customers' && $method === 'GET') {
                $controller->topCustomers();
            } elseif ($method === 'GET' && !$id) {
                $controller->index();
            } elseif ($method === 'GET' && $id) {
                $controller->show($id);
            } elseif ($method === 'POST') {
                $controller->store();
            } elseif ($method === 'DELETE' && $id) {
                $controller->destroy($id);
            } else {
                Response::notFound();
            }
        }
        
        // Users Routes
        elseif ($resource === 'users') {
            $controller = new UserController($db);
            
            if ($method === 'GET' && !$id) {
                $controller->index();
            } elseif ($method === 'GET' && $id) {
                $controller->show($id);
            } elseif ($method === 'POST') {
                $controller->store();
            } elseif ($method === 'PUT' && $id) {
                $controller->update($id);
            } elseif ($method === 'DELETE' && $id) {
                $controller->destroy($id);
            } else {
                Response::notFound();
            }
        }
        
        else {
            Response::notFound('مسیر API یافت نشد');
        }
    } else {
        // صفحه اصلی
        Response::success([
            'name' => 'Khabar Ads Manager API',
            'version' => '2.0.0',
            'description' => 'سیستم مدیریت آگهی‌های روزنامه خبر - نسخه PHP',
            'endpoints' => [
                'auth' => '/api/auth/login',
                'advertisements' => '/api/advertisements',
                'print-dates' => '/api/print-dates',
                'receipts' => '/api/receipts',
                'reports' => '/api/reports',
                'users' => '/api/users'
            ]
        ]);
    }
} catch (Exception $e) {
    error_log('Error: ' . $e->getMessage());
    Response::serverError('خطای سرور: ' . (getenv('APP_ENV') === 'development' ? $e->getMessage() : 'خطای داخلی'));
}


