<?php

declare(strict_types=1);

namespace Kylin\Pet\Models;

use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Kylin\Core\Models\BaseModel;

/**
 * 宠物疫苗记录
 *
 * 依据《动物防疫法》第十七条：强制免疫义务。
 * 依据 GB/T 43825-2024《宠物诊疗服务规范》第 5 条：疫苗批号需可追溯。
 *
 * @property int    $id
 * @property int    $pet_id         宠物 ID
 * @property string $vaccine_name   疫苗名称
 * @property string $batch_no       疫苗批号
 * @property string $injected_at    接种日期
 * @property string $next_due_at    下次到期日期
 * @property string $clinic_name    诊所名称
 */
class PetVaccine extends BaseModel
{
    protected $table = 'kylin_pet_vaccines';

    protected $fillable = [
        'pet_id', 'vaccine_name', 'batch_no',
        'injected_at', 'next_due_at', 'clinic_name',
    ];

    protected $casts = [
        'injected_at' => 'date',
        'next_due_at' => 'date',
    ];

    public function pet(): BelongsTo
    {
        return $this->belongsTo(Pet::class, 'pet_id');
    }

    /**
     * 到期前 N 天内需提醒的疫苗
     */
    public function scopeExpiringInDays($query, int $days)
    {
        return $query->where('next_due_at', '<=', now()->addDays($days))
            ->where('next_due_at', '>', now());
    }
}