<?php

declare(strict_types=1);

namespace Kylin\ElderlyCare\Models;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Kylin\ElderlyCare\Traits\ElderlyCareAudit;

/**
 * 用药记录模型
 *
 * 依据《医疗机构管理条例》第三十三条，用药记录需可追溯。
 * 保留期限 >= 5 年（1825 天）。
 *
 * @property int    $id
 * @property int    $elderly_id     老人 ID
 * @property string $medication     药品名称
 * @property string $dosage         剂量
 * @property string $scheduled_at   计划用药时间
 * @property string $administered_at 实际用药时间
 * @property bool   $is_missed      是否漏服
 * @property string $administrator  给药人
 * @property string $remark         备注
 */
class MedicationRecord extends Model
{
    use ElderlyCareAudit;

    protected $table = 'kylin_elderly_medication_records';

    protected $fillable = [
        'elderly_id',
        'medication',
        'dosage',
        'scheduled_at',
        'administered_at',
        'is_missed',
        'administrator',
        'remark',
    ];

    protected function casts(): array
    {
        return [
            'scheduled_at' => 'datetime',
            'administered_at' => 'datetime',
            'is_missed' => 'boolean',
        ];
    }

    public function elderly(): BelongsTo
    {
        return $this->belongsTo(ElderlyProfile::class, 'elderly_id');
    }

    /**
     * 判断是否漏服（超过 30 分钟未用药）
     */
    public function checkMissed(): bool
    {
        if ($this->administered_at) {
            return false;
        }

        $timeout = config('elderly-care.medication_missed_timeout', 30);
        return $this->scheduled_at->addMinutes($timeout)->isPast();
    }
}
