<?php

/**
 * 文件功能：创建婚礼仪式记录表 wedding_ceremonies
 *
 * 记录每一场婚礼的档位、支付方式、举办时间及红包分发情况。
 * 一段婚姻最多同时有一场 pending/active 状态的婚礼。
 */

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

return new class extends Migration
{
    /**
     * 创建 wedding_ceremonies 表。
     */
    public function up(): void
    {
        Schema::create('wedding_ceremonies', function (Blueprint $table) {
            $table->id();
            $table->unsignedBigInteger('marriage_id')->index()->comment('关联婚姻 ID');
            $table->unsignedBigInteger('tier_id')->nullable()->index()->comment('关联婚礼档位 ID（NULL=不举办红包）');
            // 快照金额：防止档位金额被修改后影响历史记录
            $table->integer('total_amount')->default(0)->comment('婚礼红包总金额（快照值）');
            $table->enum('payer_type', ['groom', 'joint'])->comment('支付方式：groom=男方全付，joint=双方各半');
            $table->integer('groom_amount')->default(0)->comment('男方实际扣除金额');
            $table->integer('partner_amount')->default(0)->comment('女方实际扣除金额（joint时各半）');
            $table->enum('ceremony_type', ['immediate', 'scheduled'])->comment('婚礼类型：immediate=立即，scheduled=定时');
            $table->timestamp('ceremony_at')->nullable()->comment('实际或计划举办时间');
            $table->enum('status', ['pending', 'active', 'completed', 'cancelled', 'expired'])
                ->default('pending')->comment('婚礼状态');
            $table->integer('online_count')->nullable()->comment('触发时在线用户数（分发后记录）');
            $table->integer('claimed_count')->default(0)->comment('已领取人数');
            $table->integer('claimed_amount')->default(0)->comment('已领取金额合计');
            $table->timestamp('expires_at')->nullable()->comment('红包领取截止时间（24h后过期）');
            $table->timestamps();

            $table->foreign('marriage_id')->references('id')->on('marriages')->onDelete('cascade');
        });
    }

    /**
     * 回滚：删除婚礼仪式表。
     */
    public function down(): void
    {
        Schema::dropIfExists('wedding_ceremonies');
    }
};
