<?php

namespace Database\Seeders;

use App\Models\City;
use App\Models\Province;
use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\File;

class LocationSeeder extends Seeder
{
    /**
     * Türkiye'nin tüm il ve ilçelerini koordinatlarıyla birlikte veritabanına aktarır.
     * Veri kaynağı: https://github.com/BuNickTamYirmiHarfli/turkey-cities-districts-json
     */
    public function run(): void
    {
        $jsonPath = database_path('data/turkey_locations.json');
        
        if (!File::exists($jsonPath)) {
            $this->command->error('turkey_locations.json dosyası bulunamadı!');
            return;
        }

        $locations = json_decode(File::get($jsonPath), true);

        if (json_last_error() !== JSON_ERROR_NONE) {
            $this->command->error('JSON dosyası okunamadı: ' . json_last_error_msg());
            return;
        }

        $this->command->info('Türkiye il ve ilçeleri yükleniyor...');
        $this->command->newLine();

        $provinceCount = 0;
        $cityCount = 0;

        $bar = $this->command->getOutput()->createProgressBar(count($locations));
        $bar->start();

        foreach ($locations as $provinceData) {
            // İl oluştur veya güncelle
            $province = Province::updateOrCreate(
                ['slug' => $provinceData['slug']],
                [
                    'name' => $provinceData['name'],
                    'latitude' => $provinceData['latitude'],
                    'longitude' => $provinceData['longitude'],
                ]
            );
            $provinceCount++;

            // İlçeleri oluştur veya güncelle
            foreach ($provinceData['towns'] as $townData) {
                // Aynı il içinde benzersiz slug oluştur
                $citySlug = $provinceData['slug'] . '-' . $townData['slug'];
                
                City::updateOrCreate(
                    ['slug' => $citySlug],
                    [
                        'province_id' => $province->id,
                        'name' => $townData['name'],
                        'latitude' => $townData['latitude'],
                        'longitude' => $townData['longitude'],
                    ]
                );
                $cityCount++;
            }

            $bar->advance();
        }

        $bar->finish();
        $this->command->newLine(2);
        $this->command->info("✅ {$provinceCount} il ve {$cityCount} ilçe başarıyla yüklendi!");
    }
}
