<?php

namespace Database\Seeders;

use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\File;

class ShippingSeeder extends Seeder
{
    public function run(): void
    {
        DB::statement('SET FOREIGN_KEY_CHECKS=0;');

        foreach (['cities', 'states', 'countries'] as $table) {
            if (DB::getSchemaBuilder()->hasTable($table)) {
                DB::table($table)->truncate();
            }
        }

        $this->runInsertStatements(database_path('shipping/countries.sql'));
        $this->runInsertStatements(database_path('shipping/states.sql'));
        $this->runInsertStatements(database_path('shipping/cities.sql'));

        DB::statement('SET FOREIGN_KEY_CHECKS=1;');
    }

    protected function runInsertStatements(string $path): void
    {
        if (!File::exists($path)) {
            $this->command?->warn("Seed file not found: {$path}");
            return;
        }

        $raw = File::get($path);
        $statements = array_filter(array_map('trim', preg_split('/;\s*\n/', $raw)));

        foreach ($statements as $statement) {
            if (!str_starts_with($statement, 'INSERT INTO')) {
                continue;
            }

            DB::unprepared($statement . ';');
        }
    }
}
