<?php

/**
 * 文件功能：创建用户身份徽章表。
 *
 * 用于记录用户通过签到等来源获得的身份展示信息，当前阶段只由签到服务刷新 sign_in 来源。
 */

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

/**
 * 类功能：维护 user_identity_badges 表结构与回滚逻辑。
 */
return new class extends Migration
{
    /**
     * 创建用户身份徽章表。
     */
    public function up(): void
    {
        Schema::create('user_identity_badges', function (Blueprint $table) {
            $table->id();
            $table->foreignId('user_id')->constrained()->cascadeOnDelete()->comment('用户ID');
            $table->string('source', 30)->default('sign_in')->comment('徽章来源');
            $table->string('badge_code', 50)->comment('徽章编码');
            $table->string('badge_name', 50)->comment('徽章名称');
            $table->string('badge_icon', 120)->nullable()->comment('徽章图标');
            $table->string('badge_color', 20)->nullable()->comment('徽章文字颜色');
            $table->timestamp('acquired_at')->nullable()->comment('获得时间');
            $table->timestamp('expires_at')->nullable()->index()->comment('过期时间，空表示长期有效');
            $table->boolean('is_active')->default(true)->index()->comment('是否当前启用');
            $table->json('metadata')->nullable()->comment('扩展信息');
            $table->timestamps();

            $table->unique(['user_id', 'source', 'badge_code'], 'uniq_user_identity_badge');
            $table->index(['user_id', 'source', 'is_active'], 'idx_user_identity_badges_current');
        });
    }

    /**
     * 回滚：删除用户身份徽章表。
     */
    public function down(): void
    {
        Schema::dropIfExists('user_identity_badges');
    }
};
