<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Validation\Rule;
use Illuminate\Database\Eloquent\Factories\HasFactory;

class Patient extends Model
{
    use HasFactory;
    
    protected $table = 'patients';
    
    protected $fillable = [
        'first_name',
        'last_name',
        'national_code',
        'sex',
        'age',
        'phone_number',
        'address'
    ];
    
    protected $casts = [
        'age' => 'integer',
    ];
    
    // Custom validation rules
    public static function rules($id = null)
    {
        return [
            'first_name' => 'required|string|max:50',
            'last_name' => 'required|string|max:50',
            'national_code' => [
                'required',
                'regex:/^[0-9]{10}$/',
                Rule::unique('patients')->ignore($id)
            ],
            'sex' => 'required|string|max:50',
            'age' => 'required|integer|min:1|max:110',
            'phone_number' => 'required|regex:/^09[0-9]{9}$/',
            'address' => 'required|string|max:100',
        ];
    }
    
    public static function validationMessages()
    {
        return [
            'first_name.required' => 'نام یا نام خانوادگی خالی است',
            'last_name.required' => 'نام یا نام خانوادگی خالی است',
            'national_code.regex' => 'کد ملی باید ده رقمی باشد',
            'national_code.unique' => 'کد ملی تکراری است',
            'phone_number.regex' => 'شماره تلفن معتبر نیست. شماره تلفن باید 11 رقمی باشد و با 09 شروع شود.',
            'age.min' => 'سن باید بیشتر از 1 باشد',
            'age.max' => 'سن باید کمتر از 110 باشد',
        ];
    }
    // In Patient model
public function diagnoses()
{
    return $this->hasMany(Diagnose::class);
}

public function latestDiagnosis()
{
    return $this->hasOne(Diagnose::class)->latest();
}

    
    // Get absolute URL (similar to Django's get_absolute_url)
    public function getAbsoluteUrl()
    {
        return route('patients.show', $this->id);
    }
}