<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class RapBonusRule extends Model
{
    protected $table = 'rap_bonus_rules';

    protected $fillable = [
        'nama_rule',
        'min_mahasiswa',
        'max_mahasiswa',
        'nominal_bonus',
        'is_active',
        'urutan',
    ];

    protected $casts = [
        'min_mahasiswa' => 'integer',
        'max_mahasiswa' => 'integer',
        'nominal_bonus' => 'integer',
        'urutan' => 'integer',
        'is_active' => 'string',
    ];

    /**
     * Scope untuk rule yang aktif
     */
    public function scopeAktif($query)
    {
        return $query->where('is_active', 'aktif');
    }

    /**
     * Cek apakah jumlah mahasiswa masuk dalam range rule ini
     */
    public function isInRange($jumlahMahasiswa)
    {
        if ($jumlahMahasiswa < $this->min_mahasiswa) {
            return false;
        }

        if ($this->max_mahasiswa !== null && $jumlahMahasiswa > $this->max_mahasiswa) {
            return false;
        }

        return true;
    }

    /**
     * Get range text
     */
    public function getRangeTextAttribute()
    {
        if ($this->max_mahasiswa) {
            return $this->min_mahasiswa . ' - ' . $this->max_mahasiswa . ' Mahasiswa';
        }
        return '≥ ' . $this->min_mahasiswa . ' Mahasiswa';
    }

    /**
     * Get nominal bonus formatted
     */
    public function getNominalBonusFormattedAttribute()
    {
        return 'Rp ' . number_format($this->nominal_bonus, 0, ',', '.');
    }

    /**
     * Get status badge
     */
    public function getStatusBadgeAttribute()
    {
        if ($this->is_active === 'aktif') {
            return '<span class="px-2 py-1 text-xs rounded-full bg-green-500/10 text-green-600">Aktif</span>';
        }
        return '<span class="px-2 py-1 text-xs rounded-full bg-red-500/10 text-red-600">Nonaktif</span>';
    }
}
