<?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 分钟。
 * 保留期限 >= 3 年（1095 天）。
 *
 * @property int    $id
 * @property int    $elderly_id     老人 ID
 * @property string $call_type      呼叫类型: manual/auto/device
 * @property string $location       呼叫位置
 * @property string $called_at      呼叫时间
 * @property string $responded_at   响应时间
 * @property int    $response_seconds 响应耗时（秒）
 * @property string $handler        处理人
 * @property string $result         处理结果
 * @property string $status         状态: pending/responded/resolved
 */
class EmergencyCall extends Model
{
    use ElderlyCareAudit;

    protected $table = 'kylin_elderly_emergency_calls';

    protected $fillable = [
        'elderly_id',
        'call_type',
        'location',
        'called_at',
        'responded_at',
        'response_seconds',
        'handler',
        'result',
        'status',
    ];

    protected function casts(): array
    {
        return [
            'called_at' => 'datetime',
            'responded_at' => 'datetime',
            'response_seconds' => 'integer',
        ];
    }

    /**
     * 模型启动：保存前自动计算响应耗时
     */
    protected static function booted(): void
    {
        static::saving(function (self $call) {
            if ($call->called_at && $call->responded_at) {
                $call->response_seconds = $call->called_at
                    ->diffInSeconds($call->responded_at);
            }
        });
    }

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

    /**
     * 判断是否超时响应（> 5 分钟）
     */
    public function isOverdue(): bool
    {
        $timeout = config('elderly-care.emergency_response_timeout', 5);
        return $this->response_seconds > $timeout * 60;
    }
}
