<?php

declare(strict_types=1);

namespace Seka\Portal\Modul\Statistiky\Database\Factories;

use Carbon\Carbon;
use Illuminate\Database\Eloquent\Factories\Factory;
use Seka\Portal\Modul\Statistiky\Entities\Zaznam\Enums\DruhEmisnejKontrolyEnum;
use Seka\Portal\Modul\Statistiky\Entities\Zaznam\Enums\DruhPalivaEnum;
use Seka\Portal\Modul\Statistiky\Entities\Zaznam\Enums\DruhSubjektuZaznamuEnum;
use Seka\Portal\Modul\Statistiky\Entities\Zaznam\Enums\EmisnySystemEnum;
use Seka\Portal\Modul\Statistiky\Entities\Zaznam\Enums\HodnotenieEmisnejKontrolyEnum;
use Seka\Portal\Modul\Statistiky\Entities\Zaznam\Enums\StavEmisnejKontrolyEnum;
use Seka\Portal\Modul\Statistiky\Entities\Zaznam\ValueObjects\Subjekt;
use Seka\Portal\Modul\Statistiky\Entities\Zaznam\ValueObjects\UdajePreTypZaznamuPouzivatel;
use Seka\Portal\Modul\Statistiky\Entities\Zaznam\ValueObjects\ZoznamPoctuKontrolPodlaDruhu;
use Seka\Portal\Modul\Statistiky\Entities\Zaznam\ValueObjects\ZoznamPoctuKontrolPodlaDruhuPalivaAEmisnehoSystemuVozidla;
use Seka\Portal\Modul\Statistiky\Entities\Zaznam\ValueObjects\ZoznamPoctuKontrolPodlaHodnotenia;
use Seka\Portal\Modul\Statistiky\Entities\Zaznam\ValueObjects\ZoznamPoctuKontrolPodlaKategorieVozidla;
use Seka\Portal\Modul\Statistiky\Entities\Zaznam\ValueObjects\ZoznamPoctuKontrolPodlaStavu;
use Seka\Portal\Modul\Statistiky\Entities\Zaznam\ValueObjects\ZoznamPoctuKontrolSObratom;
use Seka\Portal\Modul\Statistiky\Entities\Zaznam\Zaznam;

/**
 * Class ZaznamFactory
 *
 * Factory for creating Zaznam model instances.
 */
class ZaznamFactory extends Factory
{
    /**
     * The name of the factory's corresponding model.
     *
     * @var string
     */
    protected $model = Zaznam::class;

    /**
     * Define the model's default state.
     *
     * @return array<string, mixed>
     */
    public function definition(): array
    {
        return [
            'pracovisko_id' => 111111111,
            'subjekt' => new Subjekt(DruhSubjektuZaznamuEnum::POUZIVATEL, 'tester'),
            'datum' => Carbon::now(),
            'udaje' => new UdajePreTypZaznamuPouzivatel(
                ZoznamPoctuKontrolSObratom::createFromArray([
                    [
                        'obrat' => floatval(rand(1, 199)),
                        'pocet' => 10,
                    ],
                ]),
                ZoznamPoctuKontrolPodlaDruhu::createFromArray([
                    [
                        'druh' => $this->faker->randomElement(DruhEmisnejKontrolyEnum::cases()),
                        'pocet' => rand(1, 25),
                    ],
                ]),
                ZoznamPoctuKontrolPodlaStavu::createFromArray([
                    [
                        'stav' => $this->faker->randomElement(StavEmisnejKontrolyEnum::cases()),
                        'pocet' => rand(1, 25),
                    ],
                ]),
                ZoznamPoctuKontrolPodlaHodnotenia::createFromArray([
                    [
                        'hodnotenie' => $this->faker->randomElement(HodnotenieEmisnejKontrolyEnum::cases()),
                        'pocet' => rand(1, 25),
                    ],
                ]),
                ZoznamPoctuKontrolPodlaKategorieVozidla::createFromArray([
                    [
                        'kategoria' => 'M1',
                        'pocet' => rand(1, 25),
                    ],
                ]),
                ZoznamPoctuKontrolPodlaDruhuPalivaAEmisnehoSystemuVozidla::createFromArray([
                    [
                        'druh_paliva' => $this->faker->randomElement(DruhPalivaEnum::cases()),
                        'emisny_system' => $this->faker->randomElement(EmisnySystemEnum::cases()),
                        'pocet' => rand(1, 25),
                    ],
                ])
            ),
        ];
    }
}
