<?php

/**
 * 文件功能：节日福利活动表迁移
 *
 * 管理员可在后台创建定时发放的节日金币福利活动，
 * 支持随机/定额两种分配方式，支持周期性重复。
 */

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

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

            // 活动基本信息
            $table->string('name', 100)->comment('活动名称（公屏广播时显示）');
            $table->text('description')->nullable()->comment('活动描述/广播文案');

            // 奖励配置
            $table->unsignedInteger('total_amount')->comment('总金币奖池');
            $table->unsignedInteger('max_claimants')->default(0)->comment('最大领取人数（0=不限）');
            $table->enum('distribute_type', ['random', 'fixed'])->default('random')->comment('分配方式：random=随机 fixed=定额');
            $table->unsignedInteger('min_amount')->default(1)->comment('随机模式最低保底金额');
            $table->unsignedInteger('max_amount')->nullable()->comment('随机模式单人上限');
            $table->unsignedInteger('fixed_amount')->nullable()->comment('定额模式每人金额');

            // 时间配置
            $table->dateTime('send_at')->comment('触发时间');
            $table->unsignedInteger('expire_minutes')->default(30)->comment('领取有效期（分钟）');

            // 重复设置
            $table->enum('repeat_type', ['once', 'daily', 'weekly', 'monthly', 'cron'])->default('once');
            $table->string('cron_expr', 100)->nullable()->comment('自定义 CRON 表达式');

            // 目标用户
            $table->enum('target_type', ['all', 'vip', 'level'])->default('all')->comment('目标用户类型');
            $table->string('target_value', 50)->nullable()->comment('vip级别/最低等级值');

            // 状态
            $table->enum('status', ['pending', 'active', 'completed', 'cancelled'])->default('pending');
            $table->boolean('enabled')->default(true)->comment('是否启用');
            $table->dateTime('triggered_at')->nullable()->comment('实际触发时间');
            $table->dateTime('expires_at')->nullable()->comment('本次领取截止时间');

            // 统计
            $table->unsignedInteger('claimed_count')->default(0)->comment('已领取人数');
            $table->unsignedInteger('claimed_amount')->default(0)->comment('已发出金额');

            $table->timestamps();

            $table->index(['status', 'send_at']);
            $table->index('enabled');
        });
    }

    /**
     * 回滚迁移。
     */
    public function down(): void
    {
        Schema::dropIfExists('holiday_events');
    }
};
