<?php
namespace WooNooW\Api;

use WP_REST_Request;
use WP_REST_Response;
use WooNooW\Api\CheckoutController;
use WooNooW\Api\OrdersController;
use WooNooW\Api\AnalyticsController;
use WooNooW\Api\AuthController;
use WooNooW\Api\PaymentsController;
use WooNooW\Api\StoreController;
use WooNooW\Api\ShippingController;
use WooNooW\Api\TaxController;
use WooNooW\Api\PickupLocationsController;
use WooNooW\Api\EmailController;
use WooNooW\Api\DeveloperController;
use WooNooW\Api\SystemController;
use WooNooW\Api\NotificationsController;
use WooNooW\Api\ActivityLogController;
use WooNooW\Api\ProductsController;

class Routes {
    public static function init() {
        // Initialize controllers (register action hooks)
        OrdersController::init();
        
        add_action('rest_api_init', function () {
            $namespace = 'woonoow/v1';
            
            // Auth endpoints (public - no permission check)
            register_rest_route( $namespace, '/auth/login', [
                'methods'             => 'POST',
                'callback'            => [ AuthController::class, 'login' ],
                'permission_callback' => '__return_true',
            ] );
            
            register_rest_route( $namespace, '/auth/logout', [
                'methods'             => 'POST',
                'callback'            => [ AuthController::class, 'logout' ],
                'permission_callback' => '__return_true',
            ] );
            
            register_rest_route( $namespace, '/auth/check', [
                'methods'             => 'GET',
                'callback'            => [ AuthController::class, 'check' ],
                'permission_callback' => '__return_true',
            ] );
            
            // Defer to controllers to register their endpoints
            CheckoutController::register();
            OrdersController::register();
            AnalyticsController::register_routes();
            
            // Payments controller
            $payments_controller = new PaymentsController();
            $payments_controller->register_routes();
            
            // Store controller
            $store_controller = new StoreController();
            $store_controller->register_routes();
            
            // Shipping controller
            $shipping_controller = new ShippingController();
            $shipping_controller->register_routes();
            
            // Tax controller
            $tax_controller = new TaxController();
            $tax_controller->register_routes();
            
            // Pickup locations controller
            $pickup_controller = new PickupLocationsController();
            $pickup_controller->register_routes();
            
            // Email controller
            $email_controller = new EmailController();
            $email_controller->register_routes();
            
            // Developer controller
            $developer_controller = new DeveloperController();
            $developer_controller->register_routes();
            
            // System controller
            $system_controller = new SystemController();
            $system_controller->register_routes();
            
            // Notifications controller
            $notifications_controller = new NotificationsController();
            $notifications_controller->register_routes();
            
            // Activity Log controller
            $activity_log_controller = new ActivityLogController();
            $activity_log_controller->register_routes();
            
            // Products controller
            ProductsController::register_routes();
        });
    }
}
