<?php

namespace Database\Seeders;

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

class CiudadesAliasesTableSeeder extends Seeder
{
    use SeedOnce;

    /**
     * Alias operativos confirmados para mapear contra el catálogo oficial.
     *
     * Estos nombres salen de variantes reales detectadas en planillas de
     * importación. Persistirlas en BD evita depender de reglas hardcodeadas
     * en el servicio y permite ampliar el catálogo sin tocar código.
     */
    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 si la ciudad oficial existe en el catálogo actual.
     *
     * Se usa `updateOrInsert` para que el seeder sea idempotente en ambientes
     * donde se necesite regenerar catálogo sin duplicar aliases.
     */
    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(),
                        ]
                    );
            }
        }
    }
}
