<?php

/**
 * 文件功能：创建用户购买记录表（user_purchases）
 * 记录每个用户购买商店商品的流水与状态
 *
 * @package  Database\Migrations
 */

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('user_purchases', function (Blueprint $table) {
            $table->id();
            $table->unsignedBigInteger('user_id')->comment('购买用户 ID');
            $table->unsignedBigInteger('shop_item_id')->comment('商品 ID');
            // status:
            //   active    = 有效中（周卡 / 改名卡未使用）
            //   expired   = 已过期（周卡到期）
            //   used      = 已使用（单次卡已播 / 改名卡已用）
            //   cancelled = 被新购买的周卡覆盖作废（金币不退）
            $table->enum('status', ['active', 'expired', 'used', 'cancelled'])->default('active');
            $table->unsignedInteger('price_paid')->comment('购买时实际扣除金币');
            $table->timestamp('expires_at')->nullable()->comment('到期时间（duration 类型使用）');
            $table->timestamp('used_at')->nullable()->comment('使用时间（one_time/instant 使用）');
            $table->timestamps();

            $table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
            $table->foreign('shop_item_id')->references('id')->on('shop_items')->onDelete('cascade');
            $table->index(['user_id', 'status']);
        });
    }

    /**
     * 回滚迁移：删除购买记录表
     */
    public function down(): void
    {
        Schema::dropIfExists('user_purchases');
    }
};
