<?php

use Illuminate\Database\Seeder;
use App\Models\Reseller;
use App\Models\ResellerLanguage;
use App\Models\Country;
use App\Models\CountryLanguage;

class ResellersTableSeeder extends BaseSeeder
{
    private $amountToCreate = 10;
    
    public function __construct()
    {
        $this->availableLanguages = getAvailableLanguages();
    }

    public function run()
    {
        DB::beginTransaction();
        try {
            factory(Reseller::class, $this->amountToCreate)
                ->create()
                ->each(function ($reseller) {
                    $this->command->info("=== Starting Reseller Seeder ===");
                    // Get all multilangue objects
                    $availableLanguages = $this->availableLanguages;

                    // Create Website Objects
                    $websiteObject = $this->createWebsiteObject($reseller, 'reseller');

                    $reseller->websites()
                        ->save($websiteObject);

                    //! --- Custom Code ---
                    $country = Country::inRandomOrder()->first();
                    $countryID = $country->id;
                    $reseller->countries_id = $countryID;
                    //! --- End of Custom Code ---

                    // Create language relationships
                    foreach ($availableLanguages as $langCode => $lang) {
                        $reseller->languages()
                            ->save(
                                factory(ResellerLanguage::class)->make([
                                    'language_id' => $langCode,
                                    'reseller_id' => $reseller->id
                                ])
                            );

                        // Create Website Object Language
                        $this->createWebsiteObjectLanguage($websiteObject, $langCode);
                    }

                    $this->updateUri($websiteObject, 'reseller');

                    // Save all changes
                    $reseller->save();
                    $this->command->info("Reseller created with ID: " . ' ' . $reseller->id);
                });
            DB::commit();
        } catch(Throwable $exception) {
            DB::rollback();
            throw($exception);
        }
    }
}
