<?php
declare(strict_types=1);

namespace App\Core\Contracts;

interface RuleEngineInterface
{
    public function get(string $ruleCode, ?int $branchId = null, ?string $date = null): mixed;

    public function getValue(string $ruleCode, string $key = 'value', ?int $branchId = null): mixed;

    public function getAll(string $category, ?int $branchId = null): array;

    public function getEffective(string $ruleCode, string $entityType, int $entityId, ?int $branchId = null): mixed;

    public function require(string $ruleCode, ?int $branchId = null): array;

    public function requireValue(string $ruleCode, string $key = 'value', ?int $branchId = null): mixed;
}
