<?php
declare(strict_types=1);

namespace App\Modules\Scheduling\Models;

use App\Core\Model;
use App\Core\App;

class SchedulingRule extends Model
{
    protected static string $table = 'scheduling_rules';
    protected static string $primaryKey = 'id';
    protected static bool $timestamps = true;
    protected static bool $softDelete = false;

    protected static array $fillable = [
        'rule_name_ar', 'rule_type', 'applies_to', 'applies_to_id',
        'config_json', 'priority', 'is_active',
    ];

    public static function getRuleTypes(): array
    {
        return [
            'coach_max_hours'        => 'أقصى ساعات للمدرب يومياً',
            'facility_buffer'        => 'فترة بين الحجوزات (دقائق)',
            'age_restriction'        => 'قيد عمري على المرفق/الوقت',
            'gender_separation'      => 'فصل الجنسين في أوقات محددة',
            'rest_between_sessions'  => 'راحة بين جلسات اللاعب',
            'max_daily_sessions'     => 'أقصى جلسات يومية للاعب',
            'coach_day_off'          => 'يوم إجازة المدرب',
            'facility_maintenance'   => 'صيانة دورية للمرفق',
        ];
    }

    public static function getActiveRules(?string $ruleType = null, ?int $appliesToId = null): array
    {
        $db = App::getInstance()->db();
        $sql = "SELECT * FROM scheduling_rules WHERE is_active = 1";
        $params = [];

        if ($ruleType) {
            $sql .= " AND rule_type = ?";
            $params[] = $ruleType;
        }
        if ($appliesToId !== null) {
            $sql .= " AND (applies_to_id = ? OR applies_to = 'all')";
            $params[] = $appliesToId;
        }

        $sql .= " ORDER BY priority ASC";
        return $db->select($sql, $params);
    }

    public function getConfig(): array
    {
        $raw = $this->config_json;
        if (empty($raw)) return [];
        $decoded = json_decode($raw, true);
        return is_array($decoded) ? $decoded : [];
    }
}
