<?php

namespace Database\Seeders;

use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\DB;
use Ranium\SeedOnce\Traits\SeedOnce;

class CiudadesAliasesBootstrapSeeder extends Seeder
{
    use SeedOnce;

    /**
     * Alias iniciales confirmados a partir de planillas operativas reales.
     *
     * Este seeder existe para bootstrap de ambientes donde el seeder anterior
     * ya pudo haber quedado marcado como ejecutado por `SeedOnce`. Al usar una
     * clase nueva, el alta inicial vuelve a correr una sola vez en deploys ya
     * existentes sin duplicar datos por el `updateOrInsert`.
     */
    private const ALIASES = [
        'San Estanislao' => ['Santaní'],
        'Mariscal José Félix Estigarribia' => ['Mcal. Estigarribia'],
        'General Elizardo Aquino' => ['General Aquino'],
        'Doctor J. Eulogio Estigarribia' => ['Campo 9'],
        'General Higinio Morínigo' => ['General Morínigo'],
        'Tomás Romero Pereira' => ['María Auxiliadora'],
    ];

    /**
     * Inserta aliases sólo cuando la ciudad oficial existe en catálogo.
     *
     * Se usa `updateOrInsert` para mantener el bootstrap idempotente incluso si
     * el ambiente fue tocado manualmente o el seeder se invoca de forma directa.
     */
    public function run(): void
    {
        foreach (self::ALIASES as $officialCity => $aliases) {
            $cityId = DB::query()
                ->from('ciudades')
                ->where('nombre', $officialCity)
                ->value('id');

            if ($cityId === null) {
                continue;
            }

            foreach ($aliases as $alias) {
                DB::query()
                    ->from('ciudades_aliases')
                    ->updateOrInsert(
                        ['slug' => str_slug($alias)],
                        [
                            'ciudad_id' => $cityId,
                            'nombre' => $alias,
                            'updated_at' => now(),
                            'created_at' => now(),
                        ]
                    );
            }
        }
    }
}
