<?php

declare(strict_types=1);

namespace Kylin\Library\Models;

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

/**
 * 座位预约模型
 *
 * 依据《普通高等学校图书馆规程》：
 * - 每日预约次数限制（daily_limit = 1）
 * - 签到超时释放（check_in_timeout = 30 分钟）
 * - 违规冻结机制（3 次违规 → 冻结 7 天）
 *
 * @property int    $id
 * @property int    $reader_id      读者 ID
 * @property int    $seat_id        座位 ID
 * @property string $reserved_date  预约日期
 * @property string $start_time     开始时间
 * @property string $end_time       结束时间
 * @property string $checked_in_at  签到时间
 * @property string $status         状态
 */
class SeatReservation extends BaseModel
{
    protected $table = 'kylin_library_seat_reservations';

    protected $fillable = [
        'reader_id', 'seat_id',
        'reserved_date', 'start_time', 'end_time',
        'checked_in_at', 'status',
    ];

    protected $casts = [
        'reserved_date' => 'date',
        'checked_in_at' => 'datetime',
    ];

    /**
     * 所属读者
     */
    public function reader(): BelongsTo
    {
        return $this->belongsTo(Reader::class, 'reader_id');
    }

    /**
     * 所属座位
     */
    public function seat(): BelongsTo
    {
        return $this->belongsTo(Seat::class, 'seat_id');
    }
}