<?php
/**
 * RouteGroup Contract
 *
 * @package Licenzo\Framework\Contracts\Router
 */

namespace Licenzo\Framework\Contracts\Router;

// Prevent direct access
if (!defined('ABSPATH')) {
    exit;
}

/**
 * RouteGroup interface for fluent route grouping
 */
interface RouteGroup
{
    /**
     * Execute the group callback with current attributes
     *
     * @param \Closure $callback
     * @return void
     */
    public function group(\Closure $callback): void;

    /**
     * Add middleware to the group
     *
     * @param string|array $middleware
     * @return self
     */
    public function middleware(string|array $middleware): self;

    /**
     * Add a policy to the group
     *
     * @param string $policy
     * @return self
     */
    public function policy(string $policy): self;

    /**
     * Add a prefix to the group
     *
     * @param string $prefix
     * @return self
     */
    public function prefix(string $prefix): self;

    /**
     * Add a namespace to the group
     *
     * @param string $namespace
     * @return self
     */
    public function namespace(string $namespace): self;
}
