<?php

declare(strict_types=1);

namespace Kylin\ElderlyCare\Models;

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

/**
 * 设备监控数据模型
 *
 * 依据《养老机构管理办法》第二十三条，建立安全管理制度，配备安全设施。
 * 设备心跳超时 30 分钟告警。保留期限 1 年（365 天）。
 *
 * @property int    $id
 * @property string $device_id       设备编号
 * @property int    $elderly_id      关联老人 ID（可空）
 * @property string $device_type     设备类型: monitor/wearable/bed_sensor/emergency_button
 * @property string $status          状态: online/offline/alarm
 * @property string $last_heartbeat  最后心跳时间
 * @property array  $metadata        设备元数据（JSON）
 */
class DeviceMonitor extends Model
{
    use ElderlyCareAudit;

    protected $table = 'kylin_elderly_device_monitors';

    protected $fillable = [
        'device_id',
        'elderly_id',
        'device_type',
        'status',
        'last_heartbeat',
        'metadata',
    ];

    protected function casts(): array
    {
        return [
            'last_heartbeat' => 'datetime',
            'metadata' => 'array',
        ];
    }

    /**
     * 判断设备是否离线（超过 30 分钟无心跳）
     */
    public function isOffline(): bool
    {
        if (! $this->last_heartbeat) {
            return true;
        }

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