<?php

namespace Kylin\GameData\Models;

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

/**
 * 游戏存档模型
 *
 * 存储玩家的游戏存档数据，支持版本管理和校验和验证。
 *
 * @property int    $id
 * @property int    $user_id         用户 ID
 * @property int    $game_id         游戏 ID
 * @property array  $data            存档数据（JSON）
 * @property int    $version         存档版本
 * @property string $client_version  客户端版本
 * @property string $checksum        校验和
 */
class GameSave extends BaseModel
{
    protected $table = 'kylin_game_saves';

    protected $fillable = [
        'user_id', 'game_id', 'data', 'version',
        'client_version', 'synced_at', 'checksum',
    ];

    protected $casts = [
        'data' => 'array',
        'synced_at' => 'datetime',
    ];

    /**
     * 所属用户
     */
    public function user(): BelongsTo
    {
        return $this->belongsTo(config('kylin-user.models.user', \Kylin\User\Models\User::class));
    }

    /**
     * 所属游戏
     */
    public function game(): BelongsTo
    {
        return $this->belongsTo(config('kylin-game.models.game', \Kylin\Game\Models\Game::class));
    }

    /**
     * 存档历史
     */
    public function histories(): HasMany
    {
        return $this->hasMany(GameSaveHistory::class, 'save_id');
    }
}
