<?php

/**
 * 文件功能：创建婚礼红包领取记录表 wedding_envelope_claims
 *
 * 婚礼触发时，给当时所有在线用户预分配随机金额并写入此表。
 * 用户点击领取后标记 claimed=true，24h 后未领取的自动过期。
 */

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

return new class extends Migration
{
    /**
     * 创建 wedding_envelope_claims 表。
     */
    public function up(): void
    {
        Schema::create('wedding_envelope_claims', function (Blueprint $table) {
            $table->id();
            $table->unsignedBigInteger('ceremony_id')->index()->comment('关联婚礼仪式 ID');
            $table->unsignedBigInteger('user_id')->index()->comment('领取用户 ID');
            $table->integer('amount')->comment('预分配金额（随机红包算法计算）');
            $table->boolean('claimed')->default(false)->index()->comment('是否已领取');
            $table->timestamp('claimed_at')->nullable()->comment('领取时间');
            $table->timestamp('created_at')->nullable()->comment('分配时间');

            $table->unique(['ceremony_id', 'user_id'], 'unique_ceremony_user');
            $table->foreign('ceremony_id')->references('id')->on('wedding_ceremonies')->onDelete('cascade');
            $table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
        });
    }

    /**
     * 回滚：删除红包领取记录表。
     */
    public function down(): void
    {
        Schema::dropIfExists('wedding_envelope_claims');
    }
};
