<?php

/**
 * 文件功能：神秘箱子主表迁移
 *
 * 记录每次系统/管理员投放的神秘箱信息，包含类型、暗号、奖惩范围及领取状态。
 *
 * @author  ChatRoom Laravel
 *
 * @version 1.0.0
 */

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

return new class extends Migration
{
    /**
     * 创建神秘箱子表。
     */
    public function up(): void
    {
        Schema::create('mystery_boxes', function (Blueprint $table) {
            $table->id();

            // 箱子类型：normal=普通(500~2000) / rare=稀有(5000~20000) / trap=黑化(陷阱，倒扣)
            $table->enum('box_type', ['normal', 'rare', 'trap'])->default('normal')->comment('箱子类型');

            // 领取暗号（管理员设置或自动生成，4~8位随机字串）
            $table->string('passcode', 20)->comment('领取暗号');

            // 奖励金额范围（trap 类型此字段为负值上下界）
            $table->integer('reward_min')->default(500)->comment('最低奖励金币');
            $table->integer('reward_max')->default(2000)->comment('最高奖励金币');

            // 状态：open=可领取 / claimed=已被领取 / expired=已过期
            $table->enum('status', ['open', 'claimed', 'expired'])->default('open')->comment('箱子状态');

            // 领取截止时间（投放后 N 秒内有效）
            $table->timestamp('expires_at')->nullable()->comment('过期时间');

            // 由哪个管理员用户投放（null=系统自动投放）
            $table->unsignedBigInteger('dropped_by')->nullable()->comment('投放者用户ID，null=系统自动');

            $table->timestamps();

            $table->index('status');
            $table->index('expires_at');
        });
    }

    /**
     * 回滚：删除神秘箱子表。
     */
    public function down(): void
    {
        Schema::dropIfExists('mystery_boxes');
    }
};
