<?php

namespace Database\Seeders;

use App\Models\Kategori;
use App\Models\Wisata;
use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\File;
use Illuminate\Support\Facades\Storage;
use Illuminate\Support\Str;

class DestinationSeeder extends Seeder
{
    public function run(): void
    {
        $categories = [
            'Gunung' => Kategori::query()->firstOrCreate(
                ['slug' => 'gunung'],
                ['nama' => 'Gunung', 'deskripsi' => 'Destinasi pegunungan unggulan Lumajang.'],
            ),
            'Pantai' => Kategori::query()->firstOrCreate(
                ['slug' => 'pantai'],
                ['nama' => 'Pantai', 'deskripsi' => 'Destinasi pantai di Kabupaten Lumajang.'],
            ),
            'Danau' => Kategori::query()->firstOrCreate(
                ['slug' => 'danau'],
                ['nama' => 'Danau', 'deskripsi' => 'Destinasi ranu dan danau alami Lumajang.'],
            ),
            'Air Terjun' => Kategori::query()->firstOrCreate(
                ['slug' => 'air-terjun'],
                ['nama' => 'Air Terjun', 'deskripsi' => 'Wisata air terjun untuk eksplorasi visual.'],
            ),
        ];

        $defaultSlugs = [];

        foreach ($this->destinations() as $destination) {
            $slug = Str::slug($destination['title']);
            $defaultSlugs[] = $slug;
            $imagePath = $this->copyFlutterAsset('images/'.$destination['image'], 'wisata/'.$destination['image']);
            $modelPath = $destination['model'] === null
                ? null
                : $this->copyFlutterAsset('models/'.$destination['model'], 'models/'.$destination['model']);
            $videoPath = $destination['video'] === null
                ? null
                : $this->copyFlutterAsset('videos/'.$destination['video'], 'videos/'.$destination['video']);

            Wisata::query()->updateOrCreate(
                ['slug' => $slug],
                [
                    'kategori_id' => $categories[$destination['category']]->id,
                    'title' => $destination['title'],
                    'slug' => $slug,
                    'location' => $destination['location'],
                    'image' => $imagePath,
                    'rating' => $destination['rating'],
                    'distance' => $destination['distance'],
                    'elevation' => $destination['elevation'],
                    'tiket_parkir' => $destination['tiket_parkir'],
                    'jam_operasional' => $destination['jam_operasional'],
                    'short_description' => $destination['short_description'],
                    'overview' => $destination['overview'],
                    'model_path' => $modelPath,
                    'video_path' => $videoPath,
                    'is_video' => $destination['is_video'],
                    'latitude' => $destination['latitude'],
                    'longitude' => $destination['longitude'],
                ],
            );
        }

        Wisata::query()
            ->whereNotIn('slug', $defaultSlugs)
            ->delete();
    }

    private function copyFlutterAsset(string $sourceRelativePath, string $targetRelativePath): string
    {
        $source = base_path('../../android/wisata_app/assets/'.$sourceRelativePath);
        $targetRelativePath = str_replace('\\', '/', $targetRelativePath);

        if (! File::exists($source)) {
            $this->command?->warn("Asset Flutter tidak ditemukan: {$source}");

            return $targetRelativePath;
        }

        Storage::disk('public')->put($targetRelativePath, File::get($source));

        return $targetRelativePath;
    }

    private function destinations(): array
    {
        return [
            [
                'title' => 'Gunung Lemongan',
                'category' => 'Gunung',
                'location' => 'Papringan, Klakah, Lumajang',
                'image' => 'gunung_lemongan.jpg',
                'rating' => 4.5,
                'distance' => 'Lumajang',
                'elevation' => '1.651 mdpl',
                'tiket_parkir' => "Tiket masuk Rp10.000/orang\nParkir motor Rp5.000\nParkir mobil Rp10.000",
                'jam_operasional' => '09.00 - 17.00 WIB',
                'short_description' => 'Gunung vulkanik dengan panorama hijau, udara sejuk, dan suasana alam yang tenang.',
                'overview' => 'Gunung Lemongan (atau Gunung Lamongan) adalah gunung berapi tipe kerucut dengan ketinggian 1.671 mdpl, yang terletak di Kabupaten Lumajang, Jawa Timur. Dikenal sebagai "Gunung Seribu Maar", gunung ini memiliki keunikan berupa lanskap puluhan danau vulkanik (ranu) dan puncak yang menyerupai Gunung Fuji di Jepang.',
                'model' => 'gunung_lemongan.glb',
                'video' => null,
                'is_video' => false,
                'latitude' => -7.981471,
                'longitude' => 113.3393034,
            ],
            [
                'title' => 'Gunung Semeru',
                'category' => 'Gunung',
                'location' => 'Ngampo, Pasrujambe, Lumajang',
                'image' => 'gunung_semeru.jpg',
                'rating' => 4.6,
                'distance' => 'Lumajang',
                'elevation' => '3.676 mdpl',
                'tiket_parkir' => "WNI weekday Rp20.000/hari\nWNI weekend Rp30.000/hari\nWNA weekday Rp200.000/hari\nWNA weekend Rp300.000/hari\nHiking Rp20.000\nCamping Rp5.000\nAsuransi Rp4.000\nParkir motor Rp10.000/malam\nParkir mobil Rp20.000/malam",
                'jam_operasional' => "08.00 - 14.00 WIB\nBatas masuk jalur 15.00 WIB",
                'short_description' => 'Mahameru yang megah dengan jalur pendakian ikonik dan panorama pegunungan.',
                'overview' => 'Gunung Semeru adalah gunung berapi tertinggi di Pulau Jawa (3.676 mdpl) dan tertinggi keempat di Indonesia, terletak di Kabupaten Lumajang, Jawa Timur. Dikenal dengan Puncak Mahameru dan kawah aktif Jonggring Saloko, gunung ini bertipe stratovolcano yang sering erupsi dan menjadi ikon pendakian populer.',
                'model' => 'gunung_semeru.glb',
                'video' => null,
                'is_video' => false,
                'latitude' => -8.106702,
                'longitude' => 112.920441,
            ],
            [
                'title' => 'Pantai Watu Godeg',
                'category' => 'Pantai',
                'location' => 'Bulurejo, Tempursari, Lumajang',
                'image' => 'watu_godeg.jpg',
                'rating' => 4.4,
                'distance' => 'Lumajang',
                'elevation' => '0 mdpl',
                'tiket_parkir' => "Tiket gratis\nParkir motor Rp5.000\nParkir mobil Rp10.000",
                'jam_operasional' => '24 jam',
                'short_description' => 'Pantai selatan dengan ombak kuat, batu karang, dan suasana pesisir yang khas.',
                'overview' => 'Pantai Watu Godeg (atau Watu Godek) adalah destinasi eksotis di pesisir selatan Lumajang, Jawa Timur. Terkenal dengan hamparan pasir hitam dan tebing yang menawan, daya tarik utamanya adalah bongkahan batu besar di tepi pantai yang konon bisa bergoyang.',
                'model' => 'pantai_watu_godeg.glb',
                'video' => null,
                'is_video' => false,
                'latitude' => -8.2862,
                'longitude' => 113.2064,
            ],
            [
                'title' => 'Pantai Tlepuk',
                'category' => 'Pantai',
                'location' => 'Gondoruso, Pasirian, Lumajang',
                'image' => 'pantai_tlepuk.webp',
                'rating' => 4.1,
                'distance' => 'Lumajang',
                'elevation' => '0 mdpl',
                'tiket_parkir' => "Tiket gratis\nParkir motor Rp5.000\nParkir mobil Rp10.000",
                'jam_operasional' => '24 jam',
                'short_description' => 'Pantai selatan yang tenang dengan pasir luas dan ombak khas Lumajang.',
                'overview' => 'Pantai Tlepuk adalah destinasi pantai di Kabupaten Lumajang yang menyajikan suasana pesisir selatan, hamparan pasir, deburan ombak, dan panorama laut yang luas. Destinasi ini cocok untuk berjalan santai, menikmati udara pantai, berfoto, dan mengenal pesona alam pesisir Lumajang.',
                'model' => 'pantai_tlepuk.glb',
                'video' => null,
                'is_video' => false,
                'latitude' => -8.3151,
                'longitude' => 113.2672,
            ],
            [
                'title' => 'Puncak B29',
                'category' => 'Gunung',
                'location' => 'Argosari, Senduro, Lumajang',
                'image' => 'puncak_b29.jpg',
                'rating' => 4.7,
                'distance' => 'Lumajang',
                'elevation' => '2.900 mdpl',
                'tiket_parkir' => "Tiket Rp5.000/orang\nParkir motor Rp5.000\nParkir mobil Rp10.000",
                'jam_operasional' => '24 jam',
                'short_description' => 'Negeri di atas awan dengan pemandangan perbukitan, Bromo, dan Semeru.',
                'overview' => 'Puncak B29 adalah destinasi wisata di Desa Argosari, Senduro, Lumajang. Berada di ketinggian 2.900 mdpl, tempat ini dijuluki "Negeri di Atas Awan". Pengunjung disuguhkan panorama 360 derajat berupa lautan awan, kaldera Bromo, dan Gunung Semeru yang memukau.',
                'model' => 'puncak_b29.glb',
                'video' => null,
                'is_video' => false,
                'latitude' => -7.9592318,
                'longitude' => 112.9948334,
            ],
            [
                'title' => 'Ranu Kumbolo',
                'category' => 'Danau',
                'location' => 'Tulungrejo, Pasrujambe, Lumajang',
                'image' => 'ranu_kumbolo.webp',
                'rating' => 4.8,
                'distance' => 'Lumajang',
                'elevation' => '2.400 mdpl',
                'tiket_parkir' => "WNI weekday Rp20.000/hari\nWNI weekend Rp30.000/hari\nWNA weekday Rp200.000/hari\nWNA weekend Rp300.000/hari\nHiking Rp20.000\nCamping Rp5.000\nAsuransi Rp4.000\nParkir motor Rp10.000/malam\nParkir mobil Rp20.000/malam",
                'jam_operasional' => "08.00 - 14.00 WIB\nBatas masuk jalur 15.00 WIB",
                'short_description' => 'Danau pegunungan yang tenang dengan kabut pagi dan panorama alami.',
                'overview' => 'Ranu Kumbolo adalah danau air tawar seluas 15 hektare di kaki Gunung Semeru, Lumajang, Jawa Timur. Berada di ketinggian 2.400 mdpl dalam kawasan Taman Nasional Bromo Tengger Semeru, danau ini menjadi titik transit utama para pendaki dengan pesona alam yang asri.',
                'model' => 'ranu_kumbolo.glb',
                'video' => null,
                'is_video' => false,
                'latitude' => -8.0496,
                'longitude' => 112.9167,
            ],
            [
                'title' => 'Ranu Pani',
                'category' => 'Danau',
                'location' => 'Ranupani, Senduro, Lumajang',
                'image' => 'ranu_pani.jpg',
                'rating' => 4.6,
                'distance' => 'Lumajang',
                'elevation' => '2.100 mdpl',
                'tiket_parkir' => "Tiket Rp5.000/orang\nParkir motor Rp5.000\nParkir mobil Rp10.000",
                'jam_operasional' => "24 jam\nLoket 06.00 - 17.00 WIB",
                'short_description' => 'Danau dan desa sejuk yang menjadi pintu gerbang pendakian Semeru.',
                'overview' => 'Ranu Pani adalah danau vulkanik dan desa wisata di Kecamatan Senduro, Kabupaten Lumajang. Terletak di ketinggian sekitar 2.100 mdpl, tempat ini merupakan desa tertinggi di Pulau Jawa sekaligus pos pendakian terakhir menuju Gunung Semeru.',
                'model' => 'ranu_pani.glb',
                'video' => null,
                'is_video' => false,
                'latitude' => -8.012401,
                'longitude' => 112.946362,
            ],
            [
                'title' => 'Ranu Regulo',
                'category' => 'Danau',
                'location' => 'Ranupani, Senduro, Lumajang',
                'image' => 'ranu_regulo.jpg',
                'rating' => 4.7,
                'distance' => 'Lumajang',
                'elevation' => '2.200 mdpl',
                'tiket_parkir' => "WNI weekday Rp19.000/hari\nWNI weekend Rp24.000/hari\nWNA weekday Rp210.000/hari\nWNA weekend Rp310.000/hari\nParkir motor Rp5.000\nParkir mobil Rp10.000",
                'jam_operasional' => '07.00 - 17.00 WIB',
                'short_description' => 'Danau asri untuk menikmati ketenangan, camping, dan udara pegunungan.',
                'overview' => 'Ranu Regulo adalah danau alami eksotis yang terletak di Desa Ranu Pani, Kecamatan Senduro, Kabupaten Lumajang, Jawa Timur. Berada di ketinggian 2.100 mdpl dalam kawasan Taman Nasional Bromo Tengger Semeru, danau ini menawarkan pesona air jernih, pepohonan rindang, serta udara sejuk.',
                'model' => 'ranu_regulo.glb',
                'video' => null,
                'is_video' => false,
                'latitude' => -8.013194,
                'longitude' => 112.951833,
            ],
            [
                'title' => 'Air Terjun Tumpak Sewu',
                'category' => 'Air Terjun',
                'location' => 'Sidomulyo, Pronojiwo, Lumajang',
                'image' => 'tumpak_sewu.jpg',
                'rating' => 4.8,
                'distance' => 'Lumajang',
                'elevation' => '500 mdpl',
                'tiket_parkir' => "WNI Rp20.000\nWNA Rp100.000\nParkir motor Rp5.000\nParkir mobil Rp10.000",
                'jam_operasional' => '07.00 - 15.00 WIB',
                'short_description' => 'Air terjun megah berbentuk tirai dengan panorama tebing hijau.',
                'overview' => 'Air Terjun Tumpak Sewu adalah salah satu ikon wisata alam Lumajang yang terkenal dengan aliran air bertingkat menyerupai tirai raksasa. Destinasi ini menawarkan panorama tebing hijau, suasana sejuk, dan pengalaman melihat air terjun dari sudut pandang yang memukau.',
                'model' => null,
                'video' => 'tumpak_sewu.mp4',
                'is_video' => true,
                'latitude' => -8.2310118,
                'longitude' => 112.9170576,
            ],
            [
                'title' => 'Air Terjun Kapas Biru',
                'category' => 'Air Terjun',
                'location' => 'Mulyoarjo, Pronojiwo, Lumajang',
                'image' => 'kapas_biru.webp',
                'rating' => 4.8,
                'distance' => 'Lumajang',
                'elevation' => '700 mdpl',
                'tiket_parkir' => "Tiket Rp10.000/orang\nCamping Rp20.000/orang\nParkir motor Rp5.000\nParkir mobil Rp10.000",
                'jam_operasional' => '07.00 - 16.00 WIB',
                'short_description' => 'Air terjun tinggi dengan aliran putih lembut di tengah alam asri.',
                'overview' => 'Air Terjun Kapas Biru menyajikan pemandangan air terjun tinggi dengan aliran air putih yang kontras dengan tebing dan pepohonan hijau di sekitarnya. Tempat ini cocok untuk wisatawan yang ingin menikmati suasana alam Lumajang yang segar dan menenangkan.',
                'model' => null,
                'video' => 'kapas_biru.mp4',
                'is_video' => true,
                'latitude' => -8.2249196,
                'longitude' => 112.9363216,
            ],
        ];
    }
}
