<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\HasMany;

class JobListing extends Model
{
    protected $fillable = [
        'title', 'company', 'company_logo', 'image', 'location', 'type',
        'salary_min', 'salary_max', 'requirements',
        'description', 'benefits', 'is_active', 'deadline',
    ];

    protected function casts(): array
    {
        return [
            'is_active' => 'boolean',
            'deadline' => 'datetime',
            'salary_min' => 'decimal:0',
            'salary_max' => 'decimal:0',
        ];
    }

    public function applications(): HasMany
    {
        return $this->hasMany(Application::class);
    }

    public function stages(): HasMany
    {
        return $this->hasMany(JobStage::class)->orderBy('stage_number');
    }

    public function activeStages(): HasMany
    {
        return $this->hasMany(JobStage::class)->where('is_active', true)->orderBy('stage_number');
    }

    /**
     * Get total number of stages for this job (application + form stages)
     * Stage 0 = applied, stages 1..N = form stages, final = accepted/rejected
     */
    public function getTotalStagesAttribute(): int
    {
        return $this->stages()->count();
    }

    public function getFormattedSalaryAttribute(): string
    {
        if ($this->salary_min && $this->salary_max) {
            return 'Rp ' . number_format($this->salary_min, 0, ',', '.') . ' - Rp ' . number_format($this->salary_max, 0, ',', '.');
        } elseif ($this->salary_min) {
            return 'Rp ' . number_format($this->salary_min, 0, ',', '.') . '+';
        }
        return 'Negosiasi';
    }

    public function scopeActive($query)
    {
        return $query->where('is_active', true);
    }
}
