<?php

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

/**
 * 全球行政区划表迁移
 *
 * 依据 ISO 3166-1/3166-2 标准，存储国家/省/市/区县四级行政区划数据。
 * 数据来源为公开数据（国家统计局、联合国），不含个人信息。
 */
return new class extends Migration
{
    public function up(): void
    {
        Schema::create('kylin_regions', function (Blueprint $table) {
            $table->id();
            $table->unsignedBigInteger('parent_id')->default(0)->comment('父级 ID，0=顶级');
            $table->string('name', 100)->comment('区域名称');
            $table->string('code', 20)->unique()->comment('区域编码（ISO 3166-1/2 或国家统计局编码）');
            $table->string('country_code', 5)->default('CN')->comment('国家代码（ISO 3166-1 alpha-2）');
            $table->tinyInteger('level')->default(0)->comment('层级: 0=国家 1=省 2=市 3=区县');
            $table->string('full_name', 200)->nullable()->comment('完整名称（含上级）');
            $table->string('pinyin', 200)->nullable()->comment('拼音');
            $table->string('short_name', 50)->nullable()->comment('简称');
            $table->string('calling_code', 10)->nullable()->comment('电话区号（ITU-T E.164）');
            $table->string('currency_code', 10)->nullable()->comment('货币代码（ISO 4217）');
            $table->string('currency_symbol', 10)->nullable()->comment('货币符号');
            $table->string('currency_name', 50)->nullable()->comment('货币名称');
            $table->decimal('longitude', 10, 6)->nullable()->comment('经度');
            $table->decimal('latitude', 10, 6)->nullable()->comment('纬度');
            $table->integer('sort')->default(0)->comment('排序');
            $table->boolean('status')->default(true)->comment('状态: 1=启用 0=禁用');
            $table->timestamps();

            $table->index(['parent_id', 'level']);
            $table->index(['country_code', 'level']);
            $table->index('code');
        });
    }

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