<?php

namespace ViartasThemes\Florial\Commands;

use Illuminate\Console\Command;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Http;
use Illuminate\Support\Str;
use ViartasCore\Core\Models\Item;
use ViartasCore\Core\Models\Locale;
use ViartasCore\Core\Models\Menu;
use ViartasCore\Core\Models\MenuItem;
use ViartasCore\Core\Models\Theme;
use ViartasCore\MediaManager\Services\MediaConversionService;
use ViartasModules\Pages\Models\Accounting\Page;
use ViartasModules\PostCategories\Models\Accounting\PostCategory;
use ViartasModules\Posts\Models\Accounting\Post;
use ViartasShop\Attributes\Models\Accounting\Attribute;
use ViartasShop\Attributes\Models\Accounting\AttributeGroup;
use ViartasShop\Attributes\Models\Accounting\AttributeValue;
use ViartasShop\Brands\Models\Accounting\Brand;
use ViartasShop\Brands\Models\Accounting\Model;
use ViartasShop\Cart\Models\Accounting\SellerBank;
use ViartasShop\Cart\Models\Accounting\Warehouse;
use ViartasShop\Orders\Models\InvoiceSeries;
use ViartasShop\Orders\Models\Seller;
use ViartasShop\ProductCategories\Models\Accounting\CategoryRelatedCategory;
use ViartasShop\ProductCategories\Models\Accounting\ProductCategory;
use ViartasShop\Products\Models\Accounting\Product;
use ViartasShop\Products\Models\Accounting\ProductVariant;
use ViartasShop\Warehouses\Models\WarehouseStock;
use ViartasThemes\Florial\Models\Import;

class FillShop extends Command
{
    /**
     * @var string
     */
    protected $signature = 'florial:shop';

    /**
     * @var array
     */
    private array $import = [];

    /**
     * @var array
     */
    private array $sameData = [];

    /**
     * Spalvų atributas ID (cache)
     */
    private ?int $colorAttributeId = null;

    /**
     * Ilgio atributas ID (cache)
     */
    private ?int $lengthAttributeId = null;

    /**
     * Ilgio variantų kainos pagal cm
     */
    private array $lengthPrices = [
        '50cm' => 0.50,
        '60cm' => 1.00,
        '70cm' => 1.50,
        '80cm' => 2.00,
        '90cm' => 2.50,
        '100cm' => 3.00,
    ];

    /**
     * Ilgio variantų AttributeValue ID cache
     * ['50cm' => id, '60cm' => id, ...]
     */
    private array $lengthValueIds = [];

    /**
     * Pagrindinio sandėlio ID (cache)
     */
    private ?int $warehouseId = null;

    public function __construct(
        protected MediaConversionService $mediaService
    ) {
        parent::__construct();
    }

    /**
     * @return void
     */
    public function handle(): void
    {
        $this->config();
        $this->sameData();
        $this->emptyData();
        $this->importData();

        $this->generateWarehouses();
        $this->generateSellers();

        $this->generatePages();
        $this->generatePostCategories();
        $this->generatePosts();
        $this->generateAttributes();
        $this->generateProductCategories();
        $this->generateProducts();
        $this->generatePriedai();

        $this->generateFromMenu();
    }

    // -------------------------------------------------------------------------
    // CONFIG / SETUP
    // -------------------------------------------------------------------------

    /**
     * @return void
     */
    private function config(): void
    {
        Locale::query()->update(['is_default' => false]);
        Locale::query()->where('tag', 'lt')->update(['is_default' => true]);

        Theme::query()->update(['is_default' => false]);
        Theme::query()->where('tag', 'florial')->update(['is_default' => true]);
        Theme::query()->where('tag', 'viartas-theme')->update(['is_default' => true]);
    }

    /**
     * @return void
     */
    private function sameData(): void
    {
        $this->sameData = [
            'content' => [
                'en' => '',
                'lt' => '',
            ],
            'is_visible' => true,
            'user_id'    => 1,
        ];
    }

    /**
     * @return void
     */
    private function importData(): void
    {
        $this->import = Http::timeout(30)
            ->get('https://www.topgeles.lt/cart?action=export')
            ->json();
    }

    // -------------------------------------------------------------------------
    // EMPTY DATA
    // -------------------------------------------------------------------------

    /**
     * @return void
     */
    private function emptyData(): void
    {
        // Išjungiame foreign key tikrinimą — leidžia trinti bet kokia tvarka
        DB::statement('SET FOREIGN_KEY_CHECKS=0');

        // Import map
        Import::query()
            ->whereIn('model', [
                Page::class,
                PostCategory::class,
                Post::class,
                ProductCategory::class,
                Product::class,
            ])
            ->delete();

        // Pages
        Page::query()->delete();

        // Posts
        PostCategory::query()->delete();
        Post::query()->delete();

        // Menu items
        $menus = MenuItem::query()
            ->whereHas('menus', function ($query) {
                $query->where('tag', 'top_menu');
            })
            ->get();

        foreach ($menus as $item) {
            $item->delete();
        }

        Menu::query()->where('tag', 'main_menu')->delete();
        Menu::query()->where('tag', 'bottom_left')->delete();
        Menu::query()->where('tag', 'bottom_center')->delete();
        Menu::query()->where('tag', 'bottom_right')->delete();
        Menu::query()->where('tag', 'main_page_categories')->delete();

        Item::query()->delete();

        // Attributes
        Attribute::query()->delete();
        AttributeGroup::query()->delete();

        // Brands
        Brand::query()->delete();
        Model::query()->delete();

        // Produktai ir kategorijos — ryšiai pirma, tada patys įrašai
        DB::table('attribute_product')->delete();
        DB::table('product_additional_categories')->delete();
        DB::table('attribute_value_product_variant')->delete();
        DB::table('warehouse_stocks')->delete();
        DB::table('warehouse_stock_logs')->delete();
        DB::table('product_variants')->delete();
        DB::table('products')->delete();

        DB::table('attribute_product_category')->delete();
        DB::table('category_related_categories')->delete();
        DB::table('category_related_products')->delete();
        // Nullinti parent ryšius prieš trinant — išvengiame self-reference FK klaidos
        DB::table('product_categories')->update(['product_category_id' => null]);
        DB::table('product_categories')->delete();

        // Vėl įjungiame foreign key tikrinimą
        DB::statement('SET FOREIGN_KEY_CHECKS=1');

        $this->info('Seni duomenys ištrinti.');
    }

    // -------------------------------------------------------------------------
    // ATTRIBUTES — Spalva + Ilgis
    // -------------------------------------------------------------------------

    /**
     * @return void
     */
    private function generateAttributes(): void
    {
        // --- Atributų grupė: Spalva ---
        // Ishjungiame Observer importo metu - jis vykdo broken query su JOIN
        AttributeValue::unsetEventDispatcher();

        $colorGroup = AttributeGroup::firstOrCreate(
            ['tag' => 'spalva'],
            [
                'title'      => ['lt' => 'Spalva', 'en' => 'Color'],
                'user_id'    => 1,
                'is_visible' => true,
            ]
        );

        $colorAttr = Attribute::firstOrCreate(
            ['tag' => 'spalva'],
            [
                'title'              => ['lt' => 'Spalva', 'en' => 'Color'],
                'attribute_group_id' => $colorGroup->id,
                'user_id'            => 1,
                'is_visible'         => true,
                'slug'               => ['lt' => 'spalva', 'en' => 'color'],
                'content'            => ['lt' => '', 'en' => ''],
            ]
        );

        $this->colorAttributeId = $colorAttr->id;

        // Spalvų reikšmės
        $colors = [
            ['tag' => 'raudona',          'title' => ['lt' => 'Raudona',          'en' => 'Red']],
            ['tag' => 'tamsiai-raudona',  'title' => ['lt' => 'Tamsiai raudona',  'en' => 'Dark red']],
            ['tag' => 'rozine',           'title' => ['lt' => 'Rožinė',           'en' => 'Pink']],
            ['tag' => 'sviesi-rozine',    'title' => ['lt' => 'Šviesiai rožinė',  'en' => 'Light pink']],
            ['tag' => 'balta',            'title' => ['lt' => 'Balta',            'en' => 'White']],
            ['tag' => 'kremines',         'title' => ['lt' => 'Kreminė',          'en' => 'Cream']],
            ['tag' => 'alyvine',          'title' => ['lt' => 'Alyvinė',          'en' => 'Lilac']],
            ['tag' => 'geltona',          'title' => ['lt' => 'Geltona',          'en' => 'Yellow']],
            ['tag' => 'persikine',        'title' => ['lt' => 'Persikinė',        'en' => 'Peach']],
            ['tag' => 'bordo',            'title' => ['lt' => 'Bordo',            'en' => 'Burgundy']],
            ['tag' => 'violetine',        'title' => ['lt' => 'Violetinė',        'en' => 'Violet']],
            ['tag' => 'melyna',           'title' => ['lt' => 'Mėlyna',           'en' => 'Blue']],
            ['tag' => 'ivairiospalve',    'title' => ['lt' => 'Įvairaspalvė',     'en' => 'Multicolor']],
        ];

        foreach ($colors as $color) {
            AttributeValue::firstOrCreate(
                ['tag' => $color['tag'], 'attribute_id' => $colorAttr->id],
                [
                    'title'      => $color['title'],
                    'attribute_id' => $colorAttr->id,
                    'user_id'    => 1,
                    'is_visible' => true,
                    'slug'       => ['lt' => $color['tag'], 'en' => $color['tag']],
                    'content'    => ['lt' => '', 'en' => ''],
                ]
            );
        }

        // --- Atributų grupė: Ilgis (tik rožėms) ---
        $lengthGroup = AttributeGroup::firstOrCreate(
            ['tag' => 'ilgis'],
            [
                'title'      => ['lt' => 'Ilgis', 'en' => 'Length'],
                'user_id'    => 1,
                'is_visible' => true,
            ]
        );

        $lengthAttr = Attribute::firstOrCreate(
            ['tag' => 'ilgis'],
            [
                'title'              => ['lt' => 'Ilgis', 'en' => 'Length'],
                'attribute_group_id' => $lengthGroup->id,
                'user_id'            => 1,
                'is_visible'         => true,
                'slug'               => ['lt' => 'ilgis', 'en' => 'length'],
                'content'            => ['lt' => '', 'en' => ''],
            ]
        );

        $this->lengthAttributeId = $lengthAttr->id;

        // Ilgio reikšmės
        $lengths = ['50cm', '60cm', '70cm', '80cm', '90cm', '100cm'];

        foreach ($lengths as $len) {
            $cm    = str_replace('cm', '', $len);
            $value = AttributeValue::firstOrCreate(
                ['tag' => $len, 'attribute_id' => $lengthAttr->id],
                [
                    'title'        => ['lt' => $cm . ' cm', 'en' => $cm . ' cm'],
                    'attribute_id' => $lengthAttr->id,
                    'user_id'      => 1,
                    'is_visible'   => true,
                    'slug'         => ['lt' => $len, 'en' => $len],
                    'content'      => ['lt' => '', 'en' => ''],
                ]
            );

            $this->lengthValueIds[$len] = $value->id;
        }

        // Observer vel ijungiamas
        AttributeValue::setEventDispatcher(app('events'));

        $this->info('Atributai sugeneruoti.');
    }

    // -------------------------------------------------------------------------
    // PRODUCT CATEGORIES
    // -------------------------------------------------------------------------

    /**
     * @return void
     */
    private function generateProductCategories(): void
    {
        // Kategorijų struktūra — tik mūsų nauja struktūra, NE topgeles eksportas
        $tree = [
            [
                'lt' => 'Skintos gėlės',    'en' => 'Cut flowers',
                'slug' => 'skintos-geles',
                'children' => [
                    ['lt' => 'Rožės',        'en' => 'Roses',       'slug' => 'rozes'],
                    ['lt' => 'Tulpės',       'en' => 'Tulips',      'slug' => 'tulpes'],
                    ['lt' => 'Bijūnai',      'en' => 'Peonies',     'slug' => 'bijunai'],
                    ['lt' => 'Eustomos',     'en' => 'Eustomas',    'slug' => 'eustomos'],
                    ['lt' => 'Frezijos',     'en' => 'Freesias',    'slug' => 'frezijos'],
                    ['lt' => 'Gerberos',     'en' => 'Gerberas',    'slug' => 'gerberos'],
                    ['lt' => 'Chrizantemos', 'en' => 'Chrysanthemums', 'slug' => 'chrizantemos'],
                    ['lt' => 'Kitos gėlės',  'en' => 'Other flowers', 'slug' => 'kitos-geles'],
                ],
            ],
            [
                'lt' => 'Gėlių puokštės',   'en' => 'Flower bouquets',
                'slug' => 'geliu-puokstes',
                'children' => [
                    ['lt' => 'Meilės puokštės',          'en' => 'Love bouquets',       'slug' => 'meiles-puokstes'],
                    ['lt' => 'Gimtadienio puokštės',     'en' => 'Birthday bouquets',   'slug' => 'gimtadienio-puokstes'],
                    ['lt' => 'Jubiliejaus puokštės',     'en' => 'Anniversary bouquets','slug' => 'jubiliejaus-puokstes'],
                    ['lt' => 'Vestuvių puokštės',        'en' => 'Wedding bouquets',    'slug' => 'vestuvin-puokstes'],
                    ['lt' => 'Sielos draugui / draugei', 'en' => 'For a friend',        'slug' => 'sielos-draugui-draugei'],
                    ['lt' => 'Sezono puokštės',          'en' => 'Seasonal bouquets',   'slug' => 'sezono-puokstes'],
                    ['lt' => 'Valentino diena',          'en' => 'Valentines day',      'slug' => 'valentino-diena'],
                    ['lt' => 'Kovo 8-oji',               'en' => 'March 8th',           'slug' => 'kovo-8-oji'],
                    ['lt' => 'Mamų diena',               'en' => 'Mothers Day',         'slug' => 'mamu-diena'],
                ],
            ],
            [
                'lt' => 'VIP / TOP pasiūlymai', 'en' => 'VIP / TOP offers',
                'slug' => 'vip-pasiulymai',
                'children' => [],
            ],
            [
                'lt' => 'Savaitės pasiūlymai', 'en' => 'Weekly offers',
                'slug' => 'savaites-pasiulymai',
                'children' => [],
            ],
            [
                'lt' => 'Dovanos',  'en' => 'Gifts',
                'slug' => 'dovanos',
                'children' => [
                    ['lt' => 'Meškinai',   'en' => 'Teddy bears', 'slug' => 'meskinai'],
                    ['lt' => 'Saldainiai', 'en' => 'Sweets',      'slug' => 'saldainiai'],
                    ['lt' => 'Rinkiniai',  'en' => 'Sets',        'slug' => 'rinkiniai'],
                ],
            ],
            [
                'lt' => 'Floristika renginiams', 'en' => 'Event floristics',
                'slug' => 'floristika-renginiams',
                'children' => [
                    ['lt' => 'Vestuvių floristika',    'en' => 'Wedding floristics',   'slug' => 'vestuvin-floristika'],
                    ['lt' => 'Gedulo kompozicijos',    'en' => 'Funeral compositions', 'slug' => 'gedulo-kompozicijos'],
                    ['lt' => 'Biuro dekoravimas',      'en' => 'Office decoration',    'slug' => 'biuro-dekoravimas'],
                ],
            ],
        ];

        foreach ($tree as $item) {
            $this->createCategoryFromArray($item, null);
        }

        // Pridedame Priedai kategorijų medį
        $this->generatePriedaiCategories();

        // Visos prekės — atskira kategorija viršuje
        ProductCategory::create([
            'title'               => ['lt' => 'Visos prekės', 'en' => 'All products'],
            'slug'                => ['lt' => 'visos-prekes', 'en' => 'all-products'],
            'content'             => ['lt' => '', 'en' => ''],
            'user_id'             => 1,
            'is_visible'          => true,
            'product_category_id' => null,
        ]);

        $this->info('Kategorijos sugeneruotos.');
    }

    /**
     * Sukurti kategoriją iš masyvo
     */
    private function createCategoryFromArray(array $item, ?int $parentId): ProductCategory
    {
        $created = ProductCategory::create([
            'title'               => ['lt' => $item['lt'], 'en' => $item['en']],
            'slug'                => ['lt' => $item['slug'], 'en' => $item['slug']],
            'content'             => ['lt' => '', 'en' => ''],
            'user_id'             => 1,
            'is_visible'          => true,
            'product_category_id' => $parentId,
        ]);

        // Priskirti spalvos atributą (filtravimui)
        $this->attachColorAttribute($created);

        if (!empty($item['children'])) {
            foreach ($item['children'] as $child) {
                $this->createCategoryFromArray($child, $created->id);
            }
        }

        return $created;
    }

    /**
     * Priskirti spalvos atributą kategorijai (tik filtravimui, ne pasirinkimui)
     * Naudojame DB::table tiesiogiai, kad išvengtume ambiguous column klaidos
     */
    private function attachColorAttribute(ProductCategory $category): void
    {
        if (! $this->colorAttributeId) {
            return;
        }

        // Tikrinti ar jau yra
        $exists = DB::table('attribute_product_category')
            ->where('attribute_id', $this->colorAttributeId)
            ->where('product_category_id', $category->id)
            ->exists();

        if ($exists) {
            return;
        }

        DB::table('attribute_product_category')->insert([
            'attribute_id'           => $this->colorAttributeId,
            'product_category_id'    => $category->id,
            'sort'                   => 1,
            'is_visible_in_product'  => true,
            'is_visible_in_category' => true,
            'is_filterable_lg'       => true,
            'is_filterable_sm'       => true,
            'is_selectable'          => false,
            'created_at'             => now(),
            'updated_at'             => now(),
        ]);
    }

    /**
     * Priskirti ilgio atributą rožių kategorijai (pasirenkamas variantas)
     * Naudojame DB::table tiesiogiai, kad išvengtume ambiguous column klaidos
     */
    private function attachLengthAttribute(ProductCategory $category): void
    {
        if (! $this->lengthAttributeId) {
            return;
        }

        // Tikrinti ar jau yra
        $exists = DB::table('attribute_product_category')
            ->where('attribute_id', $this->lengthAttributeId)
            ->where('product_category_id', $category->id)
            ->exists();

        if ($exists) {
            return;
        }

        DB::table('attribute_product_category')->insert([
            'attribute_id'           => $this->lengthAttributeId,
            'product_category_id'    => $category->id,
            'sort'                   => 2,
            'is_visible_in_product'  => true,
            'is_visible_in_category' => true,
            'is_filterable_lg'       => true,
            'is_filterable_sm'       => true,
            'is_selectable'          => true,
            'created_at'             => now(),
            'updated_at'             => now(),
        ]);
    }

    /**
     * Sukurti Priedai kategoriją su pogrupiais
     */
    private function generatePriedaiCategories(): void
    {
        $priedaiCat = ProductCategory::create([
            'title'               => ['lt' => 'Priedai', 'en' => 'Accessories'],
            'slug'                => ['lt' => 'priedai', 'en' => 'accessories'],
            'content'             => ['lt' => '', 'en' => ''],
            'user_id'             => 1,
            'is_visible'          => true,
            'product_category_id' => null,
        ]);

        $subCategories = [
            [
                'lt_title' => 'Atvirukai',
                'en_title' => 'Cards',
                'slug'     => 'atvirukai',
            ],
            [
                'lt_title' => 'Įpakavimas',
                'en_title' => 'Packaging',
                'slug'     => 'ipakavimas',
            ],
            [
                'lt_title' => 'Kaspinai',
                'en_title' => 'Ribbons',
                'slug'     => 'kaspinai',
            ],
            [
                'lt_title' => 'Žvakės',
                'en_title' => 'Candles',
                'slug'     => 'zvakes',
            ],
        ];

        foreach ($subCategories as $sub) {
            ProductCategory::create([
                'title'               => ['lt' => $sub['lt_title'], 'en' => $sub['en_title']],
                'slug'                => ['lt' => $sub['slug'],     'en' => $sub['slug']],
                'content'             => ['lt' => '', 'en' => ''],
                'user_id'             => 1,
                'is_visible'          => true,
                'product_category_id' => $priedaiCat->id,
            ]);
        }
    }

    // -------------------------------------------------------------------------
    // PRODUCTS
    // -------------------------------------------------------------------------

    /**
     * Produktų duomenys iš naujo eksporto (8.florial.lt)
     * Kiekviena prekė turi: id, event, category, name, slug, price, color, color_hex,
     * main_image, additional_images, product_url
     */
    private function getFlorialProducts(): array
    {
        $response = Http::timeout(30)
            ->get('https://8.florial.lt/export/products/fl0r1al-s3cret-2026')
            ->json();

        return $response['products'] ?? [];
    }

    /**
     * @return void
     */
    private function generateProducts(): void
    {
        $products = $this->getFlorialProducts();

        // Rožių kategorija (slug: rozes)
        $rozesCategory = ProductCategory::whereRaw("JSON_EXTRACT(slug, '$.lt') = 'rozes'")->first();

        // Jei rožių kategorija egzistuoja — pridėti ilgio atributą
        if ($rozesCategory) {
            $this->attachLengthAttribute($rozesCategory);
        }

        // Kategorijų cache pagal slug
        $categoryCache = [];

        foreach ($products as $product) {
            $isFlower   = $product['price'] <= 10;
            $isRose     = $product['category'] === 'Rožės';

            // --- Rasti pagrindinę kategoriją ---
            $mainCatSlug = $this->getMainCategorySlug($product, $isFlower);
            $mainCategory = $this->findOrCacheCategory($mainCatSlug, $categoryCache);

            if (! $mainCategory) {
                $this->warn("Kategorija nerasta: {$mainCatSlug} ({$product['name']})");
                continue;
            }

            // --- Sukurti produktą ---
            $created = Product::create([
                'title'               => ['lt' => $product['name'], 'en' => $product['name']],
                'slug'                => ['lt' => $product['slug'], 'en' => $product['slug']],
                'content'             => ['lt' => $product['description'] ?? '', 'en' => $product['description'] ?? ''],
                'user_id'             => 1,
                'product_category_id' => $mainCategory->id,
                'price'               => $product['price'],
                'sku'                 => $product['sku'] ?? null,
                'is_visible'          => true, // Visada matoma — is_active eksporte nėra patikimas
                'layout'              => 'default',
            ]);

            // --- Papildomos kategorijos ---
            $additionalCatIds = $this->getAdditionalCategoryIds($product, $isFlower, $mainCategory->id, $categoryCache);

            // Visos prekės — visada pridedama
            $visosPrekes = $this->findOrCacheCategory('visos-prekes', $categoryCache);
            if ($visosPrekes && $visosPrekes->id !== $mainCategory->id) {
                $additionalCatIds[] = $visosPrekes->id;
            }

            if (! empty($additionalCatIds)) {
                $syncData = [];
                foreach (array_values(array_unique($additionalCatIds)) as $index => $catId) {
                    $syncData[$catId] = ['sort' => $index];
                }
                $created->additionalCategories()->sync($syncData);
            }

            // --- Spalvos atributas ---
            $this->attachColorToProduct($created, $product['color'] ?? null);

            // --- Nuotraukos ---
            $this->attachImages($created, $product);

            // --- Rožėms — variantai pagal ilgį (stock per variantus) ---
            if ($isFlower && $isRose) {
                $this->generateRoseVariants($created, $product['slug']);
            } else {
                // --- Stock ---
                // Puokštės (>10€): 5 vnt, skintos gėlės ne rožės (≤10€): 500 vnt
                $quantity = $isFlower ? 500 : 5;
                $this->createWarehouseStock(
                    productId: $created->id,
                    sku: $product['sku'] ?? null,
                    quantity: $quantity
                );
            }
        }

        $this->info('Produktai sugeneruoti.');
    }

    /**
     * Nustatyti pagrindinę kategorijos slug pagal produkto tipą
     */
    private function getMainCategorySlug(array $product, bool $isFlower): string
    {
        if ($isFlower) {
            // Skintos gėlės — tik Rožės arba Tulpės
            return match ($product['category']) {
                'Rožės'  => 'rozes',
                'Tulpės' => 'tulpes',
                default  => 'skintos-geles',
            };
        }

        // Puokštės — pagal event ir kainą
        if ($product['price'] >= 99) {
            return 'vip-pasiulymai';
        }

        return match ($product['event']) {
            'valentino-diena' => 'meiles-puokstes',
            'kovo-8'          => 'kovo-8-oji',
            default           => 'geliu-puokstes',
        };
    }

    /**
     * Papildomos kategorijos pagal produkto tipą
     */
    private function getAdditionalCategoryIds(array $product, bool $isFlower, int $mainCatId, array &$cache): array
    {
        $slugs = [];

        if ($isFlower) {
            // Skintos gėlės — tik sezoninės
            if ($product['event'] === 'valentino-diena') {
                $slugs[] = 'valentino-diena';
            }
            if ($product['event'] === 'kovo-8') {
                $slugs[] = 'kovo-8-oji';
            }
        } else {
            // Puokštės
            $price = $product['price'];

            if ($product['event'] === 'valentino-diena') {
                $slugs[] = 'valentino-diena';
            }
            if ($product['event'] === 'kovo-8') {
                $slugs[] = 'kovo-8-oji';
                $slugs[] = 'mamu-diena';
            }

            // Pagal kainą — papildomos
            if ($price >= 45 && $price < 99) {
                $slugs[] = 'jubiliejaus-puokstes';
                $slugs[] = 'gimtadienio-puokstes';
            } elseif ($price >= 30) {
                $slugs[] = 'gimtadienio-puokstes';
                $slugs[] = 'sielos-draugui-draugei';
            }

            if ($price >= 99) {
                $slugs[] = 'meiles-puokstes';
                $slugs[] = 'jubiliejaus-puokstes';
            }
        }

        $ids = [];
        foreach ($slugs as $slug) {
            $cat = $this->findOrCacheCategory($slug, $cache);
            if ($cat && $cat->id !== $mainCatId) {
                $ids[] = $cat->id;
            }
        }

        return array_unique($ids);
    }

    /**
     * Rasti kategoriją pagal slug (su cache)
     */
    private function findOrCacheCategory(string $slug, array &$cache): ?ProductCategory
    {
        if (isset($cache[$slug])) {
            return $cache[$slug];
        }

        $cat = ProductCategory::whereRaw("JSON_EXTRACT(slug, '$.lt') = ?", [$slug])->first();
        $cache[$slug] = $cat;

        return $cat;
    }

    /**
     * Priskirti spalvos atributą produktui
     */
    private function attachColorToProduct(Product $product, ?string $colorName): void
    {
        if (! $colorName || ! $this->colorAttributeId) {
            return;
        }

        $colorTag = $this->colorNameToTag($colorName);

        $value = AttributeValue::where('attribute_id', $this->colorAttributeId)
            ->where('tag', $colorTag)
            ->first();

        if (! $value) {
            return;
        }

        DB::table('attribute_product')->insert([
            'product_id'        => $product->id,
            'attribute_id'      => $this->colorAttributeId,
            'attribute_value_id'=> $value->id,
            'sort'              => 1,
            'value_sort'        => 1,
            'is_visible'        => true,
            'is_active'         => true,
            'created_at'        => now(),
            'updated_at'        => now(),
        ]);
    }

    /**
     * Konvertuoti spalvos pavadinimą į tag
     */
    private function colorNameToTag(string $colorName): string
    {
        $map = [
            'Raudona'          => 'raudona',
            'Tamsiai raudona'  => 'tamsiai-raudona',
            'Rožinė'           => 'rozine',
            'Šviesiai rožinė'  => 'sviesi-rozine',
            'Balta'            => 'balta',
            'Kreminė'          => 'kremines',
            'Alyvinė'          => 'alyvine',
            'Geltona'          => 'geltona',
            'Persikinė'        => 'persikine',
            'Bordo'            => 'bordo',
            'Violetinė'        => 'violetine',
            'Mėlyna'           => 'melyna',
            // multi-color
            'Raudona/Kreminė'  => 'kremines',
            'Raudona/Balta'    => 'raudona',
            'Bordo/Rožinė'     => 'bordo',
            'Rožinė/Balta'     => 'rozine',
            'Rožinė/Geltona'   => 'rozine',
            'Rožinė/Kreminė'   => 'rozine',
            'Raudona/Rožinė'   => 'raudona',
            'Balta/Rožinė'     => 'balta',
            'Balta/Geltona'    => 'geltona',
            'Geltona/Balta'    => 'geltona',
            'Mėlyna/Violetinė' => 'melyna',
            'Tamsiai rožinė'   => 'sviesi-rozine',
        ];

        return $map[$colorName] ?? Str::slug($colorName);
    }

    /**
     * Kelti nuotraukas produktui
     */
    private function attachImages(Product $product, array $data): void
    {
        try {
            if (! empty($data['main_image'])) {
                $this->mediaService->attachWithConversions($product, $data['main_image']);
            }

            foreach ($data['additional_images'] ?? [] as $url) {
                if ($url) {
                    $this->mediaService->attachWithConversions($product, $url);
                }
            }
        } catch (\Exception $e) {
            $this->warn("Nuotraukos kėlimo klaida [{$product->id}]: " . $e->getMessage());
        }
    }

    /**
     * Generuoti rožių variantus pagal ilgį
     * SKU: {product-slug}-50, {product-slug}-60 ...
     */
    /**
     * Sukurti warehouse stock įrašą produktui
     * Naudojame adjustQuantity() kaip kontroleryje
     */
    private function createWarehouseStock(?int $productId, ?string $sku, float $quantity): void
    {
        if (! $this->warehouseId) {
            return;
        }

        $stock = new WarehouseStock();
        $stock->warehouse_id = $this->warehouseId;
        $stock->product_id   = $productId; // null variantams (unique constraint)
        $stock->sku          = $sku;
        $stock->quantity     = 0;
        $stock->reserved     = 0;
        $stock->save();

        $stock->adjustQuantity(
            $quantity,
            'manual_add',
            'Pradinis likutis (seeder)'
        );
    }

    private function generateRoseVariants(Product $product, string $productSlug): void
    {
        foreach ($this->lengthPrices as $lengthTag => $price) {
            $cm  = str_replace('cm', '', $lengthTag);
            $sku = $productSlug . '-' . $cm;

            $variant = ProductVariant::create([
                'product_id' => $product->id,
                'sku'        => $sku,
                'price'      => $price,
                'is_active'  => true,
            ]);

            // Susieti variantą su ilgio reikšme
            if (isset($this->lengthValueIds[$lengthTag])) {
                $variant->attributeValues()->attach($this->lengthValueIds[$lengthTag]);
            }

            // Stock variantui — product_id=null (unique constraint), identifikuojama per sku
            $this->createWarehouseStock(
                productId: null,
                sku: $sku,
                quantity: 500
            );
        }
    }

    // -------------------------------------------------------------------------
    // PRIEDAI — produktai ir ryšiai su gėlių kategorijomis
    // -------------------------------------------------------------------------

    /**
     * @return void
     */
    /**
     * Priskirti 3 puokštes prie Savaitės pasiūlymų kategorijos
     */
    private function assignWeeklyOffers(): void
    {
        $savaitesCat = ProductCategory::whereRaw("JSON_EXTRACT(slug, '$.lt') = 'savaites-pasiulymai'")->first();

        if (! $savaitesCat) {
            $this->warn('Savaitės pasiūlymų kategorija nerasta.');
            return;
        }

        // Pasirenkame 3 puokštes — vidutinės kainos, iš skirtingų renginių
        $weeklyOfferSlugs = [
            'rozine-romantika',    // Kovo 8 rožinė puokštė
            'amzina-meile',        // Valentino klasika
            'svelnumo-simfonija',  // Mišri elegantiškas variantas
        ];

        foreach ($weeklyOfferSlugs as $slug) {
            $product = Product::whereRaw("JSON_EXTRACT(slug, '$.lt') = ?", [$slug])->first();

            if (! $product) {
                continue;
            }

            // Priskirti kaip papildomą kategoriją jei dar nepriskirta
            $alreadyAssigned = $product->additionalCategories()
                ->where('product_categories.id', $savaitesCat->id)
                ->exists();

            if (! $alreadyAssigned && $product->product_category_id !== $savaitesCat->id) {
                $product->additionalCategories()->attach($savaitesCat->id, ['sort' => 0]);
            }
        }

        $this->info('Savaitės pasiūlymai priskirti.');
    }

    private function generatePriedai(): void
    {
        // Rasti priedų subkategorijas
        $atvirukai  = ProductCategory::whereRaw("JSON_EXTRACT(slug, '$.lt') = 'atvirukai'")->first();
        $ipakavimas = ProductCategory::whereRaw("JSON_EXTRACT(slug, '$.lt') = 'ipakavimas'")->first();
        $kaspinai   = ProductCategory::whereRaw("JSON_EXTRACT(slug, '$.lt') = 'kaspinai'")->first();
        $zvakes     = ProductCategory::whereRaw("JSON_EXTRACT(slug, '$.lt') = 'zvakes'")->first();

        if (! $atvirukai || ! $ipakavimas || ! $kaspinai || ! $zvakes) {
            $this->warn('Priedų kategorijos nerastos, praleista.');
            return;
        }

        // --- Atvirukai ---
        $atvirukai_produktai = [
            [
                'slug'        => 'atvirukas-sirdis',
                'title'       => 'Atvirukas „Širdis"',
                'description' => 'Baltas atvirukas su raudona širdimi. Viduje vietos jūsų žinutei.',
                'price'       => 1.50,
                'text_input'  => true,
            ],
            [
                'slug'        => 'atvirukas-gimtadienis',
                'title'       => 'Atvirukas „Gimtadienis"',
                'description' => 'Šventiškas gimtadienio atvirukas su gėlių motyvu.',
                'price'       => 1.50,
                'text_input'  => true,
            ],
            [
                'slug'        => 'atvirukas-meile',
                'title'       => 'Atvirukas „Meilė"',
                'description' => 'Romantiškas atvirukas su rožių iliustracija.',
                'price'       => 1.50,
                'text_input'  => true,
            ],
            [
                'slug'        => 'atvirukas-aciu',
                'title'       => 'Atvirukas „Ačiū"',
                'description' => 'Minimalistinis elegantiškas atvirukas dėkingumo žinutei.',
                'price'       => 1.50,
                'text_input'  => true,
            ],
            [
                'slug'        => 'atvirukas-kovo-8',
                'title'       => 'Atvirukas „Kovo 8"',
                'description' => 'Pavasariškas atvirukas Moterų dienai su tulpių motyvu.',
                'price'       => 1.50,
                'text_input'  => true,
            ],
            [
                'slug'        => 'atvirukas-uzuojauta',
                'title'       => 'Atvirukas „Užuojauta"',
                'description' => 'Santūrus atvirukas užuojautos žinutei.',
                'price'       => 1.50,
                'text_input'  => true,
            ],
        ];

        foreach ($atvirukai_produktai as $data) {
            Product::create([
                'title'               => ['lt' => $data['title'], 'en' => $data['title']],
                'slug'                => ['lt' => $data['slug'],  'en' => $data['slug']],
                'content'             => ['lt' => $data['description'], 'en' => $data['description']],
                'user_id'             => 1,
                'product_category_id' => $atvirukai->id,
                'price'               => $data['price'],
                'is_visible'          => true,
                'layout'              => 'default',
            ]);
        }

        // --- Įpakavimas ---
        $ipakavimas_produktai = [
            ['slug' => 'floristinis-popierius-kraft',   'title' => 'Floristinis popierius „Kraft"',  'price' => 2.00, 'description' => 'Natūralaus kraft popieriaus vyniojimas puokštei.'],
            ['slug' => 'floristinis-popierius-baltas',  'title' => 'Floristinis popierius „Baltas"', 'price' => 2.00, 'description' => 'Baltas floristinis popierius.'],
            ['slug' => 'floristinis-popierius-juodas',  'title' => 'Floristinis popierius „Juodas"', 'price' => 2.00, 'description' => 'Juodas floristinis popierius.'],
            ['slug' => 'floristinis-popierius-rozinis', 'title' => 'Floristinis popierius „Rožinis"','price' => 2.00, 'description' => 'Švelniai rožinis floristinis popierius.'],
            ['slug' => 'dovanu-dezute-juoda',           'title' => 'Dovanų dėžutė „Juoda"',          'price' => 4.00, 'description' => 'Elegantiška juoda dovanų dėžutė.'],
            ['slug' => 'dovanu-dezute-balta',           'title' => 'Dovanų dėžutė „Balta"',          'price' => 4.00, 'description' => 'Balta elegantiška dovanų dėžutė.'],
        ];

        foreach ($ipakavimas_produktai as $data) {
            Product::create([
                'title'               => ['lt' => $data['title'], 'en' => $data['title']],
                'slug'                => ['lt' => $data['slug'],  'en' => $data['slug']],
                'content'             => ['lt' => $data['description'], 'en' => $data['description']],
                'user_id'             => 1,
                'product_category_id' => $ipakavimas->id,
                'price'               => $data['price'],
                'is_visible'          => true,
                'layout'              => 'default',
            ]);
        }

        // --- Kaspinai ---
        $kaspinai_produktai = [
            ['slug' => 'kaspinas-baltas',   'title' => 'Šilkinis kaspinas „Baltas"',   'price' => 1.00],
            ['slug' => 'kaspinas-raudonas', 'title' => 'Šilkinis kaspinas „Raudonas"', 'price' => 1.00],
            ['slug' => 'kaspinas-auksinis', 'title' => 'Šilkinis kaspinas „Auksinis"', 'price' => 1.00],
        ];

        foreach ($kaspinai_produktai as $data) {
            Product::create([
                'title'               => ['lt' => $data['title'], 'en' => $data['title']],
                'slug'                => ['lt' => $data['slug'],  'en' => $data['slug']],
                'content'             => ['lt' => '', 'en' => ''],
                'user_id'             => 1,
                'product_category_id' => $kaspinai->id,
                'price'               => $data['price'],
                'is_visible'          => true,
                'layout'              => 'default',
            ]);
        }

        // --- Žvakės ---
        $zvakes_produktai = [
            ['slug' => 'aromatingoji-zvake-roze',    'title' => 'Aromatingoji žvakė „Rožė"',     'price' => 8.00],
            ['slug' => 'aromatingoji-zvake-vanile',  'title' => 'Aromatingoji žvakė „Vanilė"',   'price' => 8.00],
            ['slug' => 'zvake-jubiliejus',            'title' => 'Žvakė „Jubiliejus"',             'price' => 3.00],
        ];

        foreach ($zvakes_produktai as $data) {
            Product::create([
                'title'               => ['lt' => $data['title'], 'en' => $data['title']],
                'slug'                => ['lt' => $data['slug'],  'en' => $data['slug']],
                'content'             => ['lt' => '', 'en' => ''],
                'user_id'             => 1,
                'product_category_id' => $zvakes->id,
                'price'               => $data['price'],
                'is_visible'          => true,
                'layout'              => 'default',
            ]);
        }

        // --- Susieti Priedai kategoriją su gėlių kategorijomis ---
        $this->linkPriedaiToFlowerCategories($atvirukai, $ipakavimas, $kaspinai, $zvakes);

        // Savaitės pasiūlymai — priskirti 3 puokštes kaip papildomą kategoriją
        $this->assignWeeklyOffers();

        $this->info('Priedai sugeneruoti.');
    }

    /**
     * Susieti priedų kategorijas su gėlių/puokščių kategorijomis
     * per CategoryRelatedCategory (show_in_cart = true)
     */
    private function linkPriedaiToFlowerCategories(
        ProductCategory $atvirukai,
        ProductCategory $ipakavimas,
        ProductCategory $kaspinai,
        ProductCategory $zvakes
    ): void {
        // Kategorijos kurioms siūlysime priedus
        $flowerCategorySlugs = [
            'rozes',
            'tulpes',
            'skintos-geles',
            'geliu-puokstes',
            'meiles-puokstes',
            'gimtadienio-puokstes',
            'jubiliejaus-puokstes',
            'vestuviu-puokstes',
            'sielos-draugui-draugei',
            'kovo-8-oji',
            'valentino-diena',
            'vip-pasiulymai',
        ];

        foreach ($flowerCategorySlugs as $slug) {
            $flowerCat = ProductCategory::whereRaw("JSON_EXTRACT(slug, '$.lt') = ?", [$slug])->first();

            if (! $flowerCat) {
                continue;
            }

            $sort = 1;

            // Atvirukai — su teksto įvestimi (žinutė)
            CategoryRelatedCategory::create([
                'product_category_id' => $flowerCat->id,
                'related_category_id' => $atvirukai->id,
                'sort_order'          => $sort++,
                'is_active'           => true,
                'show_in_cart'        => true,
                'show_text_input'     => true,
                'text_input_label'    => ['lt' => 'Jūsų žinutė atviruke', 'en' => 'Your message on the card'],
                'text_input_required' => false,
            ]);

            // Įpakavimas
            CategoryRelatedCategory::create([
                'product_category_id' => $flowerCat->id,
                'related_category_id' => $ipakavimas->id,
                'sort_order'          => $sort++,
                'is_active'           => true,
                'show_in_cart'        => true,
                'show_text_input'     => false,
                'text_input_label'    => null,
                'text_input_required' => false,
            ]);

            // Kaspinai
            CategoryRelatedCategory::create([
                'product_category_id' => $flowerCat->id,
                'related_category_id' => $kaspinai->id,
                'sort_order'          => $sort++,
                'is_active'           => true,
                'show_in_cart'        => true,
                'show_text_input'     => false,
                'text_input_label'    => null,
                'text_input_required' => false,
            ]);

            // Žvakės
            CategoryRelatedCategory::create([
                'product_category_id' => $flowerCat->id,
                'related_category_id' => $zvakes->id,
                'sort_order'          => $sort++,
                'is_active'           => true,
                'show_in_cart'        => true,
                'show_text_input'     => false,
                'text_input_label'    => null,
                'text_input_required' => false,
            ]);
        }
    }

    // -------------------------------------------------------------------------
    // PAGES / POSTS (nepakeista)
    // -------------------------------------------------------------------------

    private function generatePages(): void
    {
        $pages = [
            [
                'title'   => ['en' => 'About us', 'lt' => 'Apie mus', 'ru' => 'О нас'],
                'content' => [
                    'lt' => '<div class=\"review-title\"><h2>Florial — gėlių parduotuvė Vilniuje</h2></div><div class=\"delivery-list\"><p class=\"text-content\">Florial — tai gėlių parduotuvė Vilniuje, kurioje rasite platų šviežių gėlių, puokščių ir floristinių kompozicijų asortimentą. Įsikūrę V. Nagevičiaus g. 3, kasdien rūpinamės, kad kiekvienas klientas gautų geriausios kokybės gėles ir profesionalią konsultaciją.</p></div><div class=\"review-title\"><h2>Mūsų istorija</h2></div><div class=\"delivery-list\"><p class=\"text-content\">Florial gimė iš meilės gėlėms ir noro dalinti džiaugsmą. Tikime, kad kiekviena gėlė turi galią perteikti jausmus — meilę, dėkingumą, užuojautą ar šventinę nuotaiką. Mūsų floristai su meile ir kruopštumu kuria kiekvieną puokštę, pritaikydami ją konkrečiai progai ir individualiam skoniui.</p></div><div class=\"review-title\"><h2>Kodėl verta rinktis Florial?</h2></div><div class=\"delivery-list\"><ul><li><strong>Šviežios gėlės</strong> — pasirūpiname, kad kasdien turėtume tik šviežiausias gėles iš patikimų tiekėjų.</li><li><strong>Platus pasirinkimas</strong> — nuo klasikinių rožių iki egzotiškų gėlių, nuo mini puokštelių iki didelių kompozicijų renginiams.</li><li><strong>Pristatymas Vilniuje</strong> — pristatomės visame Vilniaus mieste, greitai ir patikimai.</li><li><strong>Individualus požiūris</strong> — kiekvieną puokštę kuriame atsižvelgdami į Jūsų pageidavimus ir progą.</li></ul></div><div class=\"delivery-list\"><p class=\"text-content\">Įmonės kodas: 307475999 | PVM kodas: LT100019115516 | El. paštas: info@florial.lt | Tel.: +370 601 11 560</p></div>',
                    'en' => '<div class=\"review-title\"><h2>Florial — flower shop in Vilnius</h2></div><div class=\"delivery-list\"><p class=\"text-content\">Florial is a flower shop in Vilnius offering a wide range of fresh flowers, bouquets and floral compositions. Located at V. Nagevičiaus st. 3, we work every day to ensure every customer receives the best quality flowers and professional advice.</p></div><div class=\"review-title\"><h2>Why choose Florial?</h2></div><div class=\"delivery-list\"><ul><li><strong>Fresh flowers</strong> — we ensure daily fresh flowers from trusted suppliers.</li><li><strong>Wide selection</strong> — from classic roses to exotic flowers, from small bouquets to large event compositions.</li><li><strong>Vilnius delivery</strong> — we deliver throughout Vilnius, fast and reliably.</li></ul></div>',
                ],
            ],
            [
                'title'   => ['en' => 'Information', 'lt' => 'Informacija', 'ru' => 'Информация'],
                'content' => [
                    'lt' => '<div class=\"delivery-list\"><p class=\"text-content\">Informacija apie Florial gėlių parduotuvę ir mūsų paslaugas.</p></div>',
                    'en' => '<div class=\"delivery-list\"><p class=\"text-content\">Information about Florial flower shop and our services.</p></div>',
                ],
            ],
            [
                'title'    => ['en' => 'For customers', 'lt' => 'Pirkėjams', 'ru' => 'Покупателям'],
                'content'  => ['lt' => '<div class=\"delivery-list\"><p class=\"text-content\">Visa svarbi informacija pirkėjams.</p></div>', 'en' => '<div class=\"delivery-list\"><p class=\"text-content\">All important information for customers.</p></div>'],
                'children' => [
                    [
                        'title'   => ['en' => 'Payment Methods', 'lt' => 'Mokėjimo būdai', 'ru' => 'Способы оплаты'],
                        'content' => [
                            'lt' => '<div class=\"review-title\"><h2>Mokėjimo būdai</h2></div><div class=\"delivery-list\"><p class=\"text-content\">Florial siūlo kelis patogius atsiskaitymo būdus, kad apsipirkimas būtų kuo paprastesnis.</p></div><div class=\"review-title\"><h2>Banko pavedimas</h2></div><div class=\"delivery-list\"><p class=\"text-content\">Galite atsiskaityti banko pavedimu į mūsų sąskaitą. Užsakymas pradedamas vykdyti gavus mokėjimą.</p></div><div class=\"delivery-list\"><ul><li>Bankas: Swedbank AB</li><li>Sąskaita: LT29 7300 0101 9783 4623</li><li>SWIFT: HABALT22</li><li>Gavėjas: UAB Florial</li></ul></div><div class=\"review-title\"><h2>Mokėjimas kortele</h2></div><div class=\"delivery-list\"><p class=\"text-content\">Priimame Visa ir Mastercard korteles. Mokėjimas kortele — greitas, saugus ir patogus būdas atsiskaityti tiek internetu, tiek parduotuvėje.</p></div><div class=\"review-title\"><h2>Grynaisiais pinigais</h2></div><div class=\"delivery-list\"><p class=\"text-content\">Galite atsiskaityti grynaisiais pinigais atsiimant prekes mūsų parduotuvėje adresu Rinktinės g. 42, Vilnius.</p></div>',
                            'en' => '<div class=\"review-title\"><h2>Payment Methods</h2></div><div class=\"delivery-list\"><p class=\"text-content\">Florial offers several convenient payment options.</p></div><div class=\"delivery-list\"><ul><li><strong>Bank transfer</strong> — Swedbank AB, account: LT29 7300 0101 9783 4623, SWIFT: HABALT22.</li><li><strong>Card payment</strong> — Visa and Mastercard accepted.</li><li><strong>Cash</strong> — pay in cash when picking up at our store: Rinktinės st. 42, Vilnius.</li></ul></div>',
                        ],
                    ],
                    [
                        'title'   => ['en' => 'Delivery Terms', 'lt' => 'Pristatymo sąlygos', 'ru' => 'Условия доставки'],
                        'content' => [
                            'lt' => '<div class=\"review-title\"><h2>Pristatymo sąlygos</h2></div><div class=\"delivery-list\"><p class=\"text-content\">Norime, kad Jūsų užsakytos gėlės pasiektų adresatą laiku ir puikioje būklėje. Štai viskas, ką reikia žinoti apie pristatymą.</p></div><div class=\"review-title\"><h2>Pristatymo zona</h2></div><div class=\"delivery-list\"><p class=\"text-content\">Pristatomės visame Vilniaus mieste. Didelėms ar korporatyvinėms užsakymams galimas pristatymas ir už miesto ribų — susisiekite telefonu.</p></div><div class=\"review-title\"><h2>Pristatymo laikas</h2></div><div class=\"delivery-list\"><ul><li>Standartinis pristatymas — 2–4 valandos nuo užsakymo patvirtinimo.</li><li>Skubus pristatymas — per 1–2 valandas (priklausomai nuo adreso ir floristų darbo krūvio).</li><li>Pristatymas vykdomas kasdien, įskaitant savaitgalius ir šventes.</li></ul></div><div class=\"review-title\"><h2>Atsiėmimas parduotuvėje</h2></div><div class=\"delivery-list\"><p class=\"text-content\">Taip pat galite atsiimti užsakymą mūsų parduotuvėje: Rinktinės g. 42, Vilnius. Atsiėmimas — nemokamas.</p></div><div class=\"review-title\"><h2>Pristatymo kaina</h2></div><div class=\"delivery-list\"><p class=\"text-content\">Pristatymo kaina priklauso nuo adreso ir nurodo pirkinio metu. Galutinę pristatymo kainą matysite prieš patvirtinant užsakymą.</p></div>',
                            'en' => '<div class=\"review-title\"><h2>Delivery Terms</h2></div><div class=\"delivery-list\"><p class=\"text-content\">We deliver throughout Vilnius. Delivery time is 2–4 hours after order confirmation. We work every day including weekends and holidays.</p></div><div class=\"delivery-list\"><ul><li>Standard delivery — 2–4 hours</li><li>Express delivery — 1–2 hours</li><li>Free pickup at: Rinktinės st. 42, Vilnius</li></ul></div>',
                        ],
                    ],
                    [
                        'title'   => ['en' => 'Return Policy', 'lt' => 'Grąžinimo garantijos', 'ru' => 'Гарантия возврата'],
                        'content' => [
                            'lt' => '<div class=\"review-title\"><h2>Grąžinimo garantijos</h2></div><div class=\"delivery-list\"><p class=\"text-content\">Mums rūpi Jūsų pasitenkinimas. Jei kažkas nepasiteisino — susisiekite su mumis ir mes viską sutvarkysime.</p></div><div class=\"review-title\"><h2>Kada galimas grąžinimas?</h2></div><div class=\"delivery-list\"><p class=\"text-content\">Kadangi gėlės yra greitai gendantys produktai, grąžinimas galimas šiais atvejais:</p></div><div class=\"delivery-list\"><ul><li>Gėlės buvo pristatytos akivaizdžiai netinkamos kokybės.</li><li>Pristatytas neteisingas užsakymas (ne tos gėlės ar kiekis).</li><li>Gėlės buvo pažeistos pristatymo metu.</li></ul></div><div class=\"review-title\"><h2>Kaip kreiptis?</h2></div><div class=\"delivery-list\"><p class=\"text-content\">Susisiekite su mumis per 24 valandas nuo pristatymo:</p></div><div class=\"delivery-list\"><ul><li>Tel.: <a href="tel:+37067715957">+370 677 15957</a></li><li>El. paštas: <a href="mailto:info@florial.lt">info@florial.lt</a></li></ul></div><div class=\"delivery-list\"><p class=\"text-content\">Prašome pridėti nuotrauką, patvirtinančią problemos pobūdį. Stengsimės išspręsti situaciją kuo greičiau — pakeisime gėles arba grąžinsime pinigus.</p></div>',
                            'en' => '<div class=\"review-title\"><h2>Return Policy</h2></div><div class=\"delivery-list\"><p class=\"text-content\">As flowers are perishable products, returns are possible if flowers were delivered in poor condition, the wrong order was delivered, or flowers were damaged during delivery. Contact us within 24 hours: +370 677 15957 | info@florial.lt</p></div>',
                        ],
                    ],
                    [
                        'title'   => ['en' => 'Warranties', 'lt' => 'Garantijos', 'ru' => 'Гарантии'],
                        'content' => [
                            'lt' => '<div class=\"review-title\"><h2>Kokybės garantija</h2></div><div class=\"delivery-list\"><p class=\"text-content\">Florial garantuoja, kad visos parduodamos gėlės yra šviežios, aukščiausios kokybės ir tinkamai paruoštos. Dirbame tik su patikimais tiekėjais, kurie užtikrina gėlių šviežumą ir kilmę.</p></div><div class=\"review-title\"><h2>Ką garantuojame?</h2></div><div class=\"delivery-list\"><ul><li><strong>Šviežumas</strong> — visos gėlės tiekiamos šviežios, reguliariai papildomos naujomis partijomis.</li><li><strong>Kokybė</strong> — atidžiai tikrinama kiekviena gėlė prieš įdedant į puokštę.</li><li><strong>Atitikimas</strong> — puokštė atitiks Jūsų užsakymą arba susitarsime dėl pakeitimų iš anksto.</li></ul></div><div class=\"review-title\"><h2>Gėlių priežiūra namuose</h2></div><div class=\"delivery-list\"><p class=\"text-content\">Kad gėlės džiugintų kuo ilgiau, rekomenduojame:</p></div><div class=\"delivery-list\"><ul><li>Įdėkite gėles į švarų vandenį iškart gavę.</li><li>Įstrižai nupjaukite kotų galus.</li><li>Keiskite vandenį kas 2 dienas.</li><li>Laikykite vėsioje vietoje, atokiai nuo tiesioginių saulės spindulių.</li></ul></div>',
                            'en' => '<div class=\"review-title\"><h2>Quality Guarantee</h2></div><div class=\"delivery-list\"><p class=\"text-content\">Florial guarantees all flowers are fresh and of the highest quality. We work only with trusted suppliers.</p></div><div class=\"delivery-list\"><ul><li>Freshness — flowers are regularly restocked.</li><li>Quality — every flower is carefully inspected before arrangement.</li><li>Match — your bouquet will match your order.</li></ul></div>',
                        ],
                    ],
                    [
                        'title'   => ['en' => 'Terms and Conditions', 'lt' => 'Taisyklės ir sąlygos', 'ru' => 'Правила и условия'],
                        'content' => [
                            'lt' => '<div class=\"review-title\"><h2>Pirkimo taisyklės ir sąlygos</h2></div><div class=\"delivery-list\"><p class=\"text-content\">Prašome atidžiai perskaityti šias taisykles prieš pateikiant užsakymą Florial internetinėje parduotuvėje.</p></div><div class=\"review-title\"><h2>Užsakymo pateikimas</h2></div><div class=\"delivery-list\"><ul><li>Užsakymai priimami per internetinę parduotuvę arba telefonu.</li><li>Užsakymas laikomas patvirtintu gavus apmokėjimą.</li><li>Po patvirtinimo gausite el. laišką su užsakymo detalėmis.</li></ul></div><div class=\"review-title\"><h2>Kainos</h2></div><div class=\"delivery-list\"><ul><li>Visos kainos nurodytos su PVM.</li><li>Florial pasilieka teisę keisti kainas be išankstinio įspėjimo.</li><li>Pristatymo kaina skaičiuojama papildomai pagal adresą.</li></ul></div><div class=\"review-title\"><h2>Užsakymo atšaukimas</h2></div><div class=\"delivery-list\"><p class=\"text-content\">Užsakymą galite atšaukti ne vėliau kaip likus 2 valandoms iki nurodyto pristatymo laiko. Vėliau atšaukus — pinigai negrąžinami, nes gėlės jau bus paruoštos.</p></div><div class=\"review-title\"><h2>Atsakomybė</h2></div><div class=\"delivery-list\"><p class=\"text-content\">Florial neatsako už vėlavimus dėl nenugalimos jėgos aplinkybių. Visais ginčytinais atvejais kreipiamės į Vilniaus miesto teismą.</p></div>',
                            'en' => '<div class=\"review-title\"><h2>Terms and Conditions</h2></div><div class=\"delivery-list\"><ul><li>Orders accepted online or by phone.</li><li>Order confirmed upon receipt of payment.</li><li>All prices include VAT.</li><li>Orders may be cancelled up to 2 hours before delivery.</li></ul></div>',
                        ],
                    ],
                ],
            ],
            [
                'title'    => ['en' => 'Cookie Policy', 'lt' => 'Slapukų politika', 'ru' => 'Политика cookie'],
                'content'  => ['lt' => '<div class=\"delivery-list\"><p class=\"text-content\">Informacija apie slapukų naudojimą florial.lt svetainėje.</p></div>', 'en' => '<div class=\"delivery-list\"><p class=\"text-content\">Cookie policy information for florial.lt website.</p></div>'],
                'children' => [
                    [
                        'title'   => ['en' => 'Personal Data Protection', 'lt' => 'Asmens duomenų apsauga', 'ru' => 'Защита данных'],
                        'content' => [
                            'lt' => '<div class=\"review-title\"><h2>Asmens duomenų apsauga</h2></div><div class=\"delivery-list\"><p class=\"text-content\">UAB Florial (įmonės kodas 307475999, buveinė V. Nagevičiaus g. 3, Vilnius) yra Jūsų asmens duomenų valdytojas. Tvarkome Jūsų duomenis vadovaudamiesi Europos Sąjungos Bendruoju duomenų apsaugos reglamentu (BDAR/GDPR) ir Lietuvos Respublikos asmens duomenų teisinės apsaugos įstatymu.</p></div><div class=\"review-title\"><h2>Kokius duomenis renkame?</h2></div><div class=\"delivery-list\"><ul><li>Vardas, pavardė</li><li>Pristatymo adresas</li><li>El. pašto adresas</li><li>Telefono numeris</li><li>Mokėjimo informacija (neišsaugome kortelių duomenų)</li></ul></div><div class=\"review-title\"><h2>Kaip naudojame duomenis?</h2></div><div class=\"delivery-list\"><ul><li>Užsakymų vykdymui ir pristatymui</li><li>Komunikacijai su klientu dėl užsakymo</li><li>Sąskaitų faktūrų išrašymui</li></ul></div><div class=\"review-title\"><h2>Jūsų teisės</h2></div><div class=\"delivery-list\"><p class=\"text-content\">Turite teisę susipažinti su savo duomenimis, juos ištaisyti, ištrinti arba apriboti tvarkymą. Dėl duomenų apsaugos klausimų kreipkitės: <a href="mailto:info@florial.lt">info@florial.lt</a></p></div>',
                            'en' => '<div class=\"review-title\"><h2>Personal Data Protection</h2></div><div class=\"delivery-list\"><p class=\"text-content\">UAB Florial (company code 307475999) processes your personal data in accordance with GDPR. We collect name, delivery address, email, and phone number solely for order fulfillment. You have the right to access, correct, or delete your data. Contact: info@florial.lt</p></div>',
                        ],
                    ],
                    [
                        'title'   => ['en' => 'Cookie Usage Rules', 'lt' => 'Slapukų naudojimo taisyklės', 'ru' => 'Правила cookie'],
                        'content' => [
                            'lt' => '<div class=\"review-title\"><h2>Slapukų naudojimo taisyklės</h2></div><div class=\"delivery-list\"><p class=\"text-content\">Florial.lt svetainė naudoja slapukus (angl. cookies), kad užtikrintų geresnę vartotojo patirtį ir svetainės veikimą.</p></div><div class=\"review-title\"><h2>Kokius slapukus naudojame?</h2></div><div class=\"delivery-list\"><ul><li><strong>Būtinieji slapukai</strong> — reikalingi pagrindiniam svetainės veikimui (krepšelis, prisijungimas). Jų išjungti negalima.</li><li><strong>Funkciniai slapukai</strong> — įsimena Jūsų nustatymus (kalba, valiuta).</li><li><strong>Analitiniai slapukai</strong> — padeda mums suprasti, kaip naudotojai naudojasi svetaine (Google Analytics). Duomenys renkami anonimiškai.</li></ul></div><div class=\"review-title\"><h2>Kaip valdyti slapukus?</h2></div><div class=\"delivery-list\"><p class=\"text-content\">Slapukus galite valdyti naršyklės nustatymuose. Išjungus tam tikrus slapukus, dalis svetainės funkcijų gali neveikti tinkamai.</p></div>',
                            'en' => '<div class=\"review-title\"><h2>Cookie Usage Rules</h2></div><div class=\"delivery-list\"><p class=\"text-content\">Florial.lt uses cookies to ensure a better user experience. We use essential cookies (required for website operation), functional cookies (remember your settings), and analytical cookies (anonymous traffic analysis via Google Analytics).</p></div>',
                        ],
                    ],
                    [
                        'title'   => ['en' => 'Cookie Policy', 'lt' => 'Slapukų politika', 'ru' => 'Политика cookie'],
                        'content' => [
                            'lt' => '<div class=\"review-title\"><h2>Slapukų politika</h2></div><div class=\"delivery-list\"><p class=\"text-content\">Naudodamiesi florial.lt svetaine sutinkate su slapukų naudojimo politika, aprašyta šiame dokumente.</p></div><div class=\"delivery-list\"><p class=\"text-content\">Jei nesutinkate su slapukų naudojimu, galite išjungti slapukus naršyklės nustatymuose arba nesinaudoti šia svetaine. Atkreipiame dėmesį, kad išjungus slapukus, kai kurios svetainės funkcijos gali neveikti.</p></div><div class=\"delivery-list\"><p class=\"text-content\">Politika gali būti atnaujinama. Rekomenduojame periodiškai ją peržiūrėti.</p></div><div class=\"delivery-list\"><p class=\"text-content\">Klausimai: <a href="mailto:info@florial.lt">info@florial.lt</a></p></div>',
                            'en' => '<div class=\"review-title\"><h2>Cookie Policy</h2></div><div class=\"delivery-list\"><p class=\"text-content\">By using florial.lt you agree to our cookie policy. You can disable cookies in your browser settings, but some features may not work correctly.</p></div>',
                        ],
                    ],
                ],
            ],
            [
                'title'   => ['en' => 'Contact us', 'lt' => 'Kontaktai', 'ru' => 'Контакты'],
                'content' => [
                    'lt' => '<div class=\"review-title\"><h2>Susisiekite su mumis</h2></div><div class=\"delivery-list\"><p class=\"text-content\">Esame pasiruošę atsakyti į visus Jūsų klausimus ir padėti išsirinkti tobulą gėlių dovaną.</p></div><div class=\"review-title\"><h2>Kontaktinė informacija</h2></div><div class=\"delivery-list\"><ul><li><strong>Adresas:</strong> Rinktinės g. 42, Vilnius</li><li><strong>Telefonas:</strong> <a href="tel:+37060111560">+370 601 11 560</a></li><li><strong>Mobilus telefonas:</strong> <a href="tel:+37067715957">+370 677 15957</a></li><li><strong>El. paštas:</strong> <a href="mailto:info@florial.lt">info@florial.lt</a></li><li><strong>Tinklalapis:</strong> <a href="https://www.florial.lt">www.florial.lt</a></li></ul></div><div class=\"review-title\"><h2>Darbo laikas</h2></div><div class=\"delivery-list\"><p class=\"text-content\">Dirbame kasdien. Pristatomės visame Vilniaus mieste.</p></div><div class=\"review-title\"><h2>Rekvizitai</h2></div><div class=\"delivery-list\"><ul><li>Įmonės pavadinimas: UAB Florial</li><li>Įmonės kodas: 307475999</li><li>PVM mokėtojo kodas: LT100019115516</li><li>Bankas: Swedbank AB</li><li>Sąskaitos numeris: LT29 7300 0101 9783 4623</li><li>SWIFT: HABALT22</li></ul></div>',
                    'en' => '<div class=\"review-title\"><h2>Contact us</h2></div><div class=\"delivery-list\"><ul><li><strong>Address:</strong> Rinktinės st. 42, Vilnius</li><li><strong>Phone:</strong> <a href="tel:+37060111560">+370 601 11 560</a></li><li><strong>Email:</strong> <a href="mailto:info@florial.lt">info@florial.lt</a></li></ul></div><div class=\"review-title\"><h2>Company details</h2></div><div class=\"delivery-list\"><ul><li>Company: UAB Florial</li><li>Code: 307475999</li><li>VAT: LT100019115516</li><li>Bank: Swedbank AB, LT29 7300 0101 9783 4623, SWIFT: HABALT22</li></ul></div>',
                ],
            ],
        ];

        foreach ($pages as $page) {
            $created = Page::query()->create(array_merge($this->sameData, $page));

            if (isset($page['children'])) {
                foreach ($page['children'] as $child) {
                    $child['page_id'] = $created->id;
                    Page::query()->create(array_merge($this->sameData, $child));
                }
            }
        }
    }

    private function generatePostCategories(): void
    {
        foreach ($this->import['post_categories'] as $page) {
            $created = PostCategory::query()->create($page);

            Import::query()->create(array_merge($page, [
                'inner_id'           => $created->id,
                'model'              => PostCategory::class,
                'external_id'        => $page['external_id'],
                'external_parent_id' => $page['external_parent_id'],
            ]));
        }
    }

    private function generatePosts(): void
    {
        foreach ($this->import['posts'] as $page) {
            $external = Import::query()
                ->where('external_id', $page['external_parent_id'])
                ->where('model', PostCategory::class)
                ->first();

            $created = Post::query()->create(array_merge($page, [
                'post_category_id' => $external->inner_id,
            ]));

            Import::query()->create(array_merge($page, [
                'inner_id'           => $created->id,
                'model'              => Post::class,
                'external_id'        => $page['external_id'],
                'external_parent_id' => $page['external_parent_id'],
            ]));
        }
    }

    // -------------------------------------------------------------------------
    // MENU / WAREHOUSES / SELLERS (nepakeista)
    // -------------------------------------------------------------------------

    private function generateFromMenu(): void
    {
        // --- Top menu ---
        $menu = Menu::query()->where('tag', 'top_menu')->first();
        $menu->items()->create([
            'element'      => 0,
            'class'        => 'ViartasModules\Pages\Models\Accounting\Page',
            'sort'         => 1,
            'layout'       => 'sidebar',
            'has_children' => 1,
        ]);

        $menu->items()->create([
            'element'      => PostCategory::query()->where('title->lt', 'Straipsniai ir patarimai')->first()->id,
            'class'        => 'ViartasModules\PostCategories\Models\Accounting\PostCategory',
            'sort'         => 2,
            'layout'       => 'sidebar',
            'has_children' => 1,
        ]);

        // --- Main menu — tik kategorijos (be Cookie ir Informacija) ---
        $mainMenu = Menu::create([
            'title'  => ['en' => 'Main menu', 'lt' => 'Pagrindinis meniu', 'ru' => 'Главное меню'],
            'tag'    => 'main_menu',
            'guard'  => 'web',
            'layout' => 'main',
            'depth'  => 3,
        ]);

        $mainMenu->items()->create([
            'element'      => 0,
            'class'        => 'ViartasShop\ProductCategories\Models\Accounting\ProductCategory',
            'sort'         => 1,
            'layout'       => 'sidebar',
            'has_children' => 1,
        ]);

        // --- Bottom left — kategorijos ---
        $bottomLeft = Menu::create([
            'title'  => ['en' => 'Footer categories', 'lt' => 'Apatinis meniu — kategorijos'],
            'tag'    => 'bottom_left',
            'guard'  => 'web',
            'layout' => 'footer',
            'depth'  => 1,
        ]);

        $categorySlugs = [
            'skintos-geles',
            'geliu-puokstes',
            'vip-pasiulymai',
            'dovanos',
            'floristika-renginiams',
            'priedai',
        ];

        $sort = 1;
        foreach ($categorySlugs as $slug) {
            $cat = ProductCategory::whereRaw("JSON_EXTRACT(slug, '$.lt') = ?", [$slug])->first();
            if ($cat) {
                $bottomLeft->items()->create([
                    'element'      => $cat->id,
                    'class'        => 'ViartasShop\ProductCategories\Models\Accounting\ProductCategory',
                    'sort'         => $sort++,
                    'layout'       => 'default',
                    'has_children' => 0,
                ]);
            }
        }

        // --- Bottom center — naudingos nuorodos ---
        $bottomCenter = Menu::create([
            'title'  => ['en' => 'Footer useful links', 'lt' => 'Apatinis meniu — nuorodos'],
            'tag'    => 'bottom_center',
            'guard'  => 'web',
            'layout' => 'footer',
            'depth'  => 1,
        ]);

        // Apie mus
        $apieMusPage = Page::query()->whereRaw("JSON_EXTRACT(title, '$.lt') = 'Apie mus'")->first();
        if ($apieMusPage) {
            $bottomCenter->items()->create([
                'element'      => $apieMusPage->id,
                'class'        => 'ViartasModules\Pages\Models\Accounting\Page',
                'sort'         => 1,
                'layout'       => 'default',
                'has_children' => 0,
            ]);
        }

        // Straipsniai ir patarimai
        $straipsniai = PostCategory::query()->where('title->lt', 'Straipsniai ir patarimai')->first();
        if ($straipsniai) {
            $bottomCenter->items()->create([
                'element'      => $straipsniai->id,
                'class'        => 'ViartasModules\PostCategories\Models\Accounting\PostCategory',
                'sort'         => 2,
                'layout'       => 'default',
                'has_children' => 0,
            ]);
        }

        // Kontaktai
        $kontaktaiPage = Page::query()->whereRaw("JSON_EXTRACT(title, '$.lt') = 'Kontaktai'")->first();
        if ($kontaktaiPage) {
            $bottomCenter->items()->create([
                'element'      => $kontaktaiPage->id,
                'class'        => 'ViartasModules\Pages\Models\Accounting\Page',
                'sort'         => 3,
                'layout'       => 'default',
                'has_children' => 0,
            ]);
        }

        // --- Bottom right — Pirkėjams submeniu + Slapukų politika ---
        $bottomRight = Menu::create([
            'title'  => ['en' => 'Footer help', 'lt' => 'Apatinis meniu — pagalba'],
            'tag'    => 'bottom_right',
            'guard'  => 'web',
            'layout' => 'footer',
            'depth'  => 1,
        ]);

        $rightPageTitles = [
            'Mokėjimo būdai',
            'Pristatymo sąlygos',
            'Grąžinimo garantijos',
            'Garantijos',
            'Taisyklės ir sąlygos',
            'Asmens duomenų apsauga',
            'Slapukų naudojimo taisyklės',
        ];

        $sort = 1;
        foreach ($rightPageTitles as $title) {
            $page = Page::query()->whereRaw("JSON_EXTRACT(title, '$.lt') = ?", [$title])->first();
            if ($page) {
                $bottomRight->items()->create([
                    'element'      => $page->id,
                    'class'        => 'ViartasModules\Pages\Models\Accounting\Page',
                    'sort'         => $sort++,
                    'layout'       => 'default',
                    'has_children' => 0,
                ]);
            }
        }

        // --- Main page categories — kaip screene: gėlės + puokštės + top ---
        $mainPageMenu = Menu::create([
            'title'  => ['en' => 'Main page categories', 'lt' => 'Pagrindinio puslapio kategorijos'],
            'tag'    => 'main_page_categories',
            'guard'  => 'web',
            'layout' => 'sidebar',
            'depth'  => 1,
        ]);

        // Viršuje — atskiros gėlės (Rožės, Tulpės, Bijūnai ir kt.)
        $flowerSlugs = [
            'rozes',
            'tulpes',
            'bijunai',
            'eustomos',
            'frezijos',
            'gerberos',
            'chrizantemos',
            'kitos-geles',
        ];

        $sort = 1;
        foreach ($flowerSlugs as $slug) {
            $cat = ProductCategory::whereRaw("JSON_EXTRACT(slug, '$.lt') = ?", [$slug])->first();
            if ($cat) {
                $mainPageMenu->items()->create([
                    'element'      => $cat->id,
                    'class'        => 'ViartasShop\ProductCategories\Models\Accounting\ProductCategory',
                    'sort'         => $sort++,
                    'layout'       => 'default',
                    'has_children' => 0,
                ]);
            }
        }

        // Puokščių subkategorijos
        $bouquetSlugs = [
            'meiles-puokstes',
            'gimtadienio-puokstes',
            'jubiliejaus-puokstes',
            'vestuvin-puokstes',
            'sielos-draugui-draugei',
            'sezono-puokstes',
            'valentino-diena',
            'kovo-8-oji',
            'mamu-diena',
        ];

        foreach ($bouquetSlugs as $slug) {
            $cat = ProductCategory::whereRaw("JSON_EXTRACT(slug, '$.lt') = ?", [$slug])->first();
            if ($cat) {
                $mainPageMenu->items()->create([
                    'element'      => $cat->id,
                    'class'        => 'ViartasShop\ProductCategories\Models\Accounting\ProductCategory',
                    'sort'         => $sort++,
                    'layout'       => 'default',
                    'has_children' => 0,
                ]);
            }
        }

        // Apačioje — VIP / TOP pasiūlymai (atskiras layout žymeklis)
        $vipCat = ProductCategory::whereRaw("JSON_EXTRACT(slug, '$.lt') = 'vip-pasiulymai'")->first();
        if ($vipCat) {
            $mainPageMenu->items()->create([
                'element'      => $vipCat->id,
                'class'        => 'ViartasShop\ProductCategories\Models\Accounting\ProductCategory',
                'sort'         => $sort++,
                'layout'       => 'featured',
                'has_children' => 0,
            ]);
        }

        $savaitescat = ProductCategory::whereRaw("JSON_EXTRACT(slug, '$.lt') = 'savaites-pasiulymai'")->first();
        if ($savaitescat) {
            $mainPageMenu->items()->create([
                'element'      => $savaitescat->id,
                'class'        => 'ViartasShop\ProductCategories\Models\Accounting\ProductCategory',
                'sort'         => $sort++,
                'layout'       => 'featured',
                'has_children' => 0,
            ]);
        }

        $this->info('Meniu sugeneruoti.');
    }

    private function generateWarehouses(): void
    {
        Warehouse::query()->delete();

        $warehouses = [
            [
                'user_id'    => 1,
                'title'      => ['en' => 'Store in Vilnius, Rinktinės 42', 'lt' => 'Parduotuvėje Vilniuje, Rinktinės 42', 'ru' => 'Магазин в Вильнюсе'],
                'content'    => null,
                'country_id' => 135,
                'state'      => 'Vilniaus m. sav.',
                'city'       => 'Vilnius',
                'address'    => 'Rinktinės g. 42',
                'zip'        => '09316',
                'phone'      => '+370 601 11 560',
                'email'      => 'info@florial.lt',
                'is_own'     => 1,
            ],
            [
                'user_id'    => 1,
                'title'      => ['en' => 'Supplier 1', 'lt' => 'Tiekėjas 1', 'ru' => 'Поставщик 1'],
                'content'    => null,
                'country_id' => 169,
                'state'      => 'Amsterdam',
                'city'       => 'Amsterdam',
                'address'    => 'Amsterdam',
                'zip'        => '06327',
                'phone'      => '+37067849854',
                'email'      => 'srklt89@gmail.com',
                'is_own'     => 0,
            ],
        ];

        foreach ($warehouses as $index => $warehouse) {
            $created = Warehouse::create($warehouse);

            // Pirmas sandėlis (is_own = true) — naudosime stock kūrimui
            if ($index === 0) {
                $this->warehouseId = $created->id;
            }
        }
    }

    private function generateSellers(): void
    {
        Seller::query()->delete();
        SellerBank::query()->delete();
        InvoiceSeries::query()->delete();

        $seller = Seller::create([
            'user_id'    => 1,
            'title'      => ['en' => 'UAB Florial', 'lt' => 'UAB Florial', 'ru' => 'UAB Florial'],
            'name'       => 'UAB Florial',
            'code'       => '307475999',
            'vat'        => 'LT100019115516',
            'address'    => 'V. Nagevičiaus g. 3, LT-08237 Vilnius',
            'phone'      => '+370 601 11 560',
            'email'      => 'info@florial.lt',
            'country_id' => 135,
            'vat_type'   => Seller::VAT_TYPE_SELLER_COUNTRY,
            'series'     => 'FLP',
            'number'     => 1,
            'note'       => null,
            'is_default' => true,
        ]);

        SellerBank::create([
            'seller_id' => $seller->id,
            'title'     => ['en' => 'Swedbank', 'lt' => 'Swedbank', 'ru' => 'Swedbank'],
            'name'      => 'Swedbank AB',
            'code'      => 'LT29 7300 0101 9783 4623',
            'swift'     => 'HABALT22',
            'address'   => null,
            'note'      => null,
        ]);

        InvoiceSeries::create([
            'seller_id'    => $seller->id,
            'series'       => 'FLP',
            'title'        => ['en' => 'Proforma invoices', 'lt' => 'Išankstinės sąskaitos', 'ru' => 'Счета-проформы'],
            'type'         => InvoiceSeries::TYPE_PROFORMA,
            'start_number' => 1,
            'is_default'   => true,
            'is_active'    => true,
        ]);

        InvoiceSeries::create([
            'seller_id'    => $seller->id,
            'series'       => 'FLV',
            'title'        => ['en' => 'VAT invoices', 'lt' => 'PVM sąskaitos faktūros', 'ru' => 'Счета-фактуры НДС'],
            'type'         => InvoiceSeries::TYPE_VAT,
            'start_number' => 1,
            'is_default'   => true,
            'is_active'    => true,
        ]);

        InvoiceSeries::create([
            'seller_id'    => $seller->id,
            'series'       => 'FLK',
            'title'        => ['en' => 'Credit notes', 'lt' => 'Kreditinės sąskaitos', 'ru' => 'Кредитные счета'],
            'type'         => InvoiceSeries::TYPE_CREDIT,
            'start_number' => 1,
            'is_default'   => true,
            'is_active'    => true,
        ]);
    }

    // -------------------------------------------------------------------------
    // HELPERS
    // -------------------------------------------------------------------------

    /**
     * Build a nested tree from flat rows using external_id / external_parent_id.
     */
    private function buildTree(array $rows, string $idKey = 'external_id', string $parentKey = 'external_parent_id'): array
    {
        $nodes = [];
        foreach ($rows as $row) {
            $id = $row[$idKey];
            $nodes[$id] = [
                'title'              => $row['title'] ?? '',
                'slug'               => $row['slug'] ?? '',
                'content'            => $row['content'] ?? '',
                'external_id'        => $row['external_id'] ?? '',
                'external_parent_id' => $row['external_parent_id'] ?? '',
                'children'           => [],
                '__parent'           => $row[$parentKey] ?? null,
            ];
        }

        $tree = [];
        foreach ($nodes as $id => &$node) {
            $parentId = $node['__parent'];
            unset($node['__parent']);

            if ($parentId && $parentId !== $id && isset($nodes[$parentId])) {
                $nodes[$parentId]['children'][] = &$node;
            } else {
                $tree[] = &$node;
            }
        }
        unset($node);

        return $tree;
    }
}
