<?php
declare(strict_types=1);

namespace Mcp;

use Exception;
use Mcp\Middleware\Middleware;

abstract class RequestHandler
{

    protected Mcp $app;
    private ?Middleware $middleware;

    public function __construct(Mcp $app, Middleware $mw = null)
    {
        $this->app = $app;
        $this->middleware = $mw;
    }

    public function handleRequest(): void
    {
        if ($_SERVER['REQUEST_METHOD'] != 'GET' && $_SERVER['REQUEST_METHOD'] != 'POST') {
            http_response_code(400);
            exit();
        }

        if ($this->middleware != null) {
            try {
                if (!$this->middleware->canAccess()) {
                    $this->middleware->handleUnauthorized();
                    exit();
                }
            } catch (Exception $e) {
                error_log("Middleware handling raised an exception: " + $e->getMessage());
                http_response_code(500);
                exit();
            }
        }

        $_SERVER['REQUEST_METHOD'] == 'GET' ? $this->get() : $this->post();
    }

    public function get(): void
    {
        http_response_code(405);
    }

    public function post(): void
    {
        http_response_code(405);
    }

}