<?php
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('admin_users', function (Blueprint $table) {
            $table->id();

            // 로그인
            $table->string('email')->unique();
            $table->string('password');

            // 관리자 기본 정보
            $table->string('full_name', 50);                 // 관리자 성명
            $table->string('nickname', 30)->unique();        // 관리자 닉네임
            $table->string('phone', 20)->nullable()->unique(); // 전화번호(선택)

            /**
             * 관리자 등급(role)
             * 예: super(최고관리자), admin(일반관리자), cs(상담전용)...
             */
            $table->string('role', 20)->default('admin')->index();

            /**
             * 관리자 상태(status)
             * 예: active(정상), blocked(접근금지), suspended(일시정지)
             */
            $table->string('status', 20)->default('active')->index();

            // 상담 가능 여부
            $table->boolean('is_consult_available')->default(false)->index();

            /**
             * 상담 종류(JSON)
             * 예: ["signup","login","payment","giftcard","event"]
             * - pivot 테이블 안 쓰고 단일테이블로 운영하려면 이게 제일 깔끔함
             */
            $table->json('consult_types')->nullable();

            // Google OTP (TOTP)
            // "code(6자리)" 저장 X  → "secret(시드)" 저장 O (암호화 저장 권장)
            $table->text('totp_secret')->nullable();
            $table->boolean('totp_enabled')->default(false)->index();
            $table->timestamp('totp_confirmed_at')->nullable();

            // 로그인 흔적 (보안/감사)
            $table->timestamp('last_login_at')->nullable();
            $table->string('last_login_ip', 45)->nullable();

            // remember me
            $table->rememberToken();

            $table->timestamps();
        });
    }

    public function down(): void
    {
        Schema::dropIfExists('admin_users');
    }
};
