<?php

declare(strict_types=1);

namespace Kylin\Library\Models;

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

/**
 * 读者模型
 *
 * 依据《个人信息保护法》第六条（最小必要原则）：
 * 仅收集借阅必要信息（姓名、借阅证号、联系方式）。
 *
 * 依据《个人信息保护法》第二十八条：
 * 敏感信息（身份证号、手机号）需加密存储。
 *
 * @property int    $id
 * @property string $name           姓名
 * @property string $reader_no      借阅证号
 * @property string $reader_type    读者类型（undergraduate/postgraduate/teacher/social）
 * @property string $phone          手机号（加密存储）
 * @property string $email          邮箱
 * @property string $id_card        身份证号（加密存储）
 * @property string $status         状态
 * @property string $expired_at     借阅证到期日
 */
class Reader extends BaseModel
{
    protected $table = 'kylin_library_readers';

    protected $fillable = [
        'name', 'reader_no', 'reader_type',
        'phone', 'email', 'id_card',
        'status', 'expired_at',
    ];

    protected $casts = [
        'expired_at' => 'datetime',
        'phone' => 'encrypted',
        'id_card' => 'encrypted',
    ];

    /**
     * 借阅记录
     */
    public function borrowRecords(): HasMany
    {
        return $this->hasMany(BorrowRecord::class, 'reader_id');
    }

    /**
     * 座位预约
     */
    public function seatReservations(): HasMany
    {
        return $this->hasMany(SeatReservation::class, 'reader_id');
    }
}