<?php

namespace Database\Seeders;

use App\Models\Structure;
use App\Models\User;
use APPLICATION;
use Faker\Factory;
use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\Hash;

class UserSeeder extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
        $faker = Factory::create('fr_FR');

        if (app()->environment('local'))
        {
            $user = User::create([
                'nom' => $faker->lastName,
                'prenom' => $faker->firstName,
                'email' => 'dev@aptimap.fr',
                'password' => Hash::make('password'),
                'active' => true,
                'structure_id' => 2,
                'portefeuille_acheteur_id' => 1 //Pour le profil acheteur
            ]);
            // Peut provoquer des erreurs -> un utilisateur ne doit posseder qu'un seul role
            $user->assignRole('administrateur_structure');
            $user->assignRole('chef_projet');
            $user->assignRole('directeur_achat');
            $user->assignRole('acheteur');
            $user->assignRole('controleur_gestion');
            $user->markEmailAsVerified();
        }

        // Super administrateur
        $user = User::create([
            'nom' => 'FAUCONNIER',
            'prenom' => 'Olivier',
            'email' => APPLICATION::ADMIN_MAIL,
            'password' => Hash::make('password'),
            'active' => true,
            'structure_id' => Structure::where('nom', 'SUPER ADMINISTRATION')->first()->id
        ]);
        $user->assignRole('super_administrateur');
        $user->markEmailAsVerified();

        // Administrateur de structure
        $user = User::create([
            'nom' => $faker->lastName,
            'prenom' => $faker->firstName,
            'email' => 'administrateur@aptimap.fr',
            'password' => Hash::make('password'),
            'active' => true,
            'structure_id' => 2
        ]);
        $user->assignRole('administrateur_structure');
        $user->markEmailAsVerified();

        $user = User::create([
            'nom' => $faker->lastName,
            'prenom' => $faker->firstName,
            'email' => 'administrateur_GHT4@aptilis.fr',
            'password' => Hash::make('password'),
            'active' => true,
            'structure_id' => 3
        ]);
        $user->assignRole('administrateur_structure');
        $user->markEmailAsVerified();

        // Chef de projet
        $user = User::create([
            'nom' => $faker->lastName,
            'prenom' => $faker->firstName,
            'email' => 'chef.projet@aptimap.fr',
            'password' => Hash::make('password'),
            'structure_id' => 2
        ]);
        $user->assignRole('chef_projet');
        $user->markEmailAsVerified();

        $user = User::create([
            'nom' => $faker->lastName,
            'prenom' => $faker->firstName,
            'email' => 'chef.projet_GHT4@aptimap.fr',
            'password' => Hash::make('password'),
            'structure_id' => 3
        ]);
        $user->assignRole('chef_projet');
        $user->markEmailAsVerified();

        // Directeur achat
        $user = User::create([
            'nom' => $faker->lastName,
            'prenom' => $faker->firstName,
            'email' => 'directeur.achat@aptimap.fr',
            'password' => Hash::make('password'),
            'structure_id' => 2
        ]);
        $user->assignRole('directeur_achat');
        $user->markEmailAsVerified();

        // Responsable achat
        $user = User::create([
            'nom' => $faker->lastName,
            'prenom' => $faker->firstName,
            'email' => 'responsable.achat@aptimap.fr',
            'password' => Hash::make('password'),
            'portefeuille_responsable_achat_id' => 1,
            'structure_id' => 2
        ]);
        $user->assignRole('responsable_achat');
        $user->markEmailAsVerified();

        // Acheteur
        $user = User::create([
            'nom' => $faker->lastName,
            'prenom' => $faker->firstName,
            'email' => 'acheteur@aptimap.fr',
            'password' => Hash::make('password'),
            'portefeuille_acheteur_id' => 1,
            'structure_id' => 2
        ]);
        $user->assignRole('acheteur');
        $user->markEmailAsVerified();

        $user = User::create([
            'nom' => $faker->lastName,
            'prenom' => $faker->firstName,
            'email' => 'acheteur1_GFHT4@aptilis.fr',
            'password' => Hash::make('password'),
            'portefeuille_acheteur_id' => 1,
            'structure_id' => 3
        ]);
        $user->assignRole('acheteur');
        $user->markEmailAsVerified();

        // Contrôleur de gestion
        $user = User::create([
            'nom' => $faker->lastName,
            'prenom' => $faker->firstName,
            'email' => 'controleur.gestion@aptimap.fr',
            'password' => Hash::make('password'),
            'structure_id' => 2
        ]);
        $user->assignRole('controleur_gestion');
        $user->markEmailAsVerified();

        // Equipe projet
        $user = User::create([
            'nom' => $faker->lastName,
            'prenom' => $faker->firstName,
            'email' => 'equipe.projet@aptimap.fr',
            'password' => Hash::make('password'),
            'direction_id' => 1,
            'service_id' => 1,
            'portefeuille_acheteur_id' => 1,
            'structure_id' => 2
        ]);
        $user->assignRole('equipe_projet');
        $user->markEmailAsVerified();

        // Expert
        $user = User::create([
            'nom' => $faker->lastName,
            'prenom' => $faker->firstName,
            'email' => 'expert@aptimap.fr',
            'password' => Hash::make('password'),
            'structure_id' => 2
        ]);
        $user->assignRole('expert');
        $user->markEmailAsVerified();

        // Directeur
        $user = User::create([
            'nom' => $faker->lastName,
            'prenom' => $faker->firstName,
            'email' => 'directeur@aptimap.fr',
            'password' => Hash::make('password'),
            'direction_id' => 1,
            'service_id' => 1,
            'structure_id' => 2
        ]);
        $user->assignRole('directeur');
        $user->markEmailAsVerified();

        // Responsable performance ARS
        $user = User::create([
            'nom' => $faker->lastName,
            'prenom' => $faker->firstName,
            'email' => 'responsable.performance.ars@aptimap.fr',
            'password' => Hash::make('password'),
            'structure_id' => 2
        ]);
        $user->assignRole('responsable_performance_ars');
        $user->markEmailAsVerified();
    }
}
