<?php

/**
 * 文件功能：在职登录记录模型
 * 对应 position_duty_logs 表，记录职务持有者每次进房的登录时间、在线时长和退出时间
 * 用于勤务台四榜统计和个人履历出勤数据展示
 *
 * @author   ChatRoom Laravel
 *
 * @version  1.0.0
 */

namespace App\Models;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;

class PositionDutyLog extends Model
{
    /**
     * 允许批量赋值的字段
     *
     * @var list<string>
     */
    protected $fillable = [
        'user_id',
        'user_position_id',
        'login_at',
        'logout_at',
        'duration_seconds',
        'ip_address',
        'room_id',
    ];

    /**
     * 字段类型转换
     */
    public function casts(): array
    {
        return [
            'login_at' => 'datetime',
            'logout_at' => 'datetime',
            'duration_seconds' => 'integer',
        ];
    }

    /**
     * 对应的用户
     */
    public function user(): BelongsTo
    {
        return $this->belongsTo(User::class);
    }

    /**
     * 对应的在职记录
     */
    public function userPosition(): BelongsTo
    {
        return $this->belongsTo(UserPosition::class);
    }

    /**
     * 格式化在线时长为"Xh Ym"字符串（如 128h 30m）
     */
    public function getFormattedDurationAttribute(): string
    {
        $seconds = $this->duration_seconds ?? 0;
        $hours = intdiv($seconds, 3600);
        $minutes = intdiv($seconds % 3600, 60);

        return "{$hours}h {$minutes}m";
    }
}
