<?php

namespace Database\Seeders;

use Illuminate\Database\Seeder;
use Illuminate\Support\Str;
use \App\Models\{Domaine, Utilisateur, Discipline, Filiere, Book, Documentation, Matiere};
use Illuminate\Support\Facades\Hash;

class DatabaseSeeder extends Seeder
{
    /**
     * Seed the application's database.
     *
     * @return void
     */
    public function run()
    {
        //Création des domaines
        Domaine::create(['nameDomaine' => 'Biologie']);
        Domaine::create(['nameDomaine' => 'Chimie']);
        Domaine::create(['nameDomaine' => 'Electronique']);
        Domaine::create(['nameDomaine' => 'Informatique']);
        Domaine::create(['nameDomaine' => 'Littérature']);
        Domaine::create(['nameDomaine' => 'Mathématiques']);
        Domaine::create(['nameDomaine' => 'Médécine']);
        Domaine::create(['nameDomaine' => 'Physique']);

        //Création des disciplines par domaine

        //Biologie 1
        Discipline::create(['nameDiscipline' => 'Biochimie', 'slug' => 'biochimie']);
        Discipline::create(['nameDiscipline' => 'Bioinformatique', 'slug' => 'bioinformatique']);
        Discipline::create(['nameDiscipline' => 'Biostatistique', 'slug' => 'biostatistique']);
        Domaine::find(1)->disciplines()->attach([1, 2, 3]);

        //Chimie 2
        Discipline::create(['nameDiscipline' => 'Chimie organique', 'slug' => 'chimie-organique']);
        Discipline::create(['nameDiscipline' => 'Chimie minérale', 'slug' => 'chimie-minerale']);
        Discipline::create(['nameDiscipline' => 'Thermochimie', 'slug' => 'thermochermie']);
        Domaine::find(2)->disciplines()->attach([1, 4, 5, 6]);

        //Electronique 3
        Discipline::create(['nameDiscipline' => 'Fonction Electronique', 'slug' => 'fonction-electronique']);
        Discipline::create(['nameDiscipline' => 'Circuit Logique et Séquentielle', 'slug' => 'circuit-logique-et-sequentielle']);
        Discipline::create(['nameDiscipline' => 'Electronique de puissance', 'slug' => 'electronique-de-puissance']);
        Domaine::find(3)->disciplines()->attach([7, 8, 9]);

        //Informatique 4
        Discipline::create(['nameDiscipline' => 'Langage C/C++', 'slug' => 'langage-C-C++']);
        Discipline::create(['nameDiscipline' => 'Base de données', 'slug' => 'base-de-donnees']);
        Discipline::create(['nameDiscipline' => 'Developpement Web', 'slug' => 'developpement-web']);
        Domaine::find(4)->disciplines()->attach([2, 10, 11, 12]);

        //Littérature 5
        Discipline::create(['nameDiscipline' => 'Anglais', 'slug' => 'anglais']);
        Discipline::create(['nameDiscipline' => 'Français', 'slug' => 'francais']);
        Discipline::create(['nameDiscipline' => 'Chinois', 'slug' => 'chinois']);
        Domaine::find(5)->disciplines()->attach([13, 14, 15]);

        //Mathématiques 6
        Discipline::create(['nameDiscipline' => 'Algèbre Linéaire', 'slug' => 'algebre-lineaire']);
        Discipline::create(['nameDiscipline' => 'Probabilités et Statistiques', 'slug' => 'probabilites-et-statistiques']);
        Discipline::create(['nameDiscipline' => 'Analyse numérique', 'slug' => 'analyse-numerique']);
        Domaine::find(6)->disciplines()->attach([3, 16, 17, 18]);

        //Médécines 7
        Discipline::create(['nameDiscipline' => 'Chirurgie', 'slug' => 'chirurgie']);
        Discipline::create(['nameDiscipline' => 'Psychologie', 'slug' => 'psychologie']);
        Discipline::create(['nameDiscipline' => 'Pédiatrie', 'slug' => 'pediatrie']);
        Domaine::find(7)->disciplines()->attach([19, 20, 21]);

        //Physique 8
        Discipline::create(['nameDiscipline' => 'Optique géométrique', 'slug' => 'optique-geometrique']);
        Discipline::create(['nameDiscipline' => 'Mécanique du point', 'slug' => 'mecanique-du-point']);
        Discipline::create(['nameDiscipline' => 'Electricité', 'slug' => 'electricite']);
        Domaine::find(8)->disciplines()->attach([22, 23, 24]);


        //Les filières
        Filiere::create(['nameFiliere' => 'GIT3']);
        Filiere::create(['nameFiliere' => 'GE3']);
        Filiere::create(['nameFiliere' => 'Others']);

        $lorem = "Lorem ipsum dolor sit amet consectetur adipisicing elit. Blanditiis quasi minima tenetur exercitationem, reiciendis commodi neque quam earum rem aspernatur numquam mollitia esse, expedita ipsam optio repellat ex, reprehenderit consectetur.
        Nobis quidem perferendis dicta at sunt, consequatur accusamus ipsa reiciendis perspiciatis temporibus culpa aspernatur eligendi? Ducimus aut nemo soluta error, quod quam libero minus ex saepe tempora impedit quas? Sunt.
        Maiores ad molestiae, debitis voluptates, nisi nobis, voluptas animi facilis asperiores quae temporibus hic omnis libero incidunt? Id, ratione soluta perferendis, rerum doloribus architecto molestias magnam vel officia corrupti et.
        At fuga iure est officia autem mollitia explicabo fugit, dolorem ipsam vel, ex quia cumque doloremque nulla reiciendis aliquam ut reprehenderit nesciunt quidem minima quo blanditiis perferendis odio! Quaerat, consequatur!
        Minus ipsa officiis est quae id possimus distinctio consectetur recusandae itaque quia, labore optio libero omnis rerum alias aliquid maiores. Assumenda maxime nihil ducimus tempore a eveniet facilis numquam quibusdam?
        Esse a placeat unde iusto eos, officiis tempore illum ducimus dolore fuga. Veniam earum magni minima ipsam aliquid rerum corporis, consequatur dolores suscipit error voluptatum reprehenderit est impedit, inventore possimus!
        Corporis expedita earum, at ipsam optio provident laborum facere ipsa possimus tenetur, voluptatum doloribus dolores temporibus eum nemo rem hic dignissimos aliquid esse. Eveniet, reiciendis distinctio? Molestias magnam a delectus!
        Voluptatibus, totam suscipit sit vel corporis voluptas quia ducimus, delectus animi, cupiditate ea eum minus officiis unde quaerat facere optio provident deserunt! Temporibus dolore iusto nostrum consequatur iste nisi exercitationem.
        Reiciendis nam aliquid tempora quo beatae est esse adipisci vitae deserunt, possimus atque aperiam! Ipsum sint eius molestiae, tempora reiciendis, quis excepturi debitis corporis cupiditate voluptatum sequi assumenda minus deleniti!
        Soluta aperiam earum magnam quia facilis porro dolores ipsa, odio, omnis dicta praesentium labore dignissimos nisi maiores aut repellendus similique saepe reiciendis temporibus dolorem, dolore repudiandae nesciunt placeat! Facilis, eveniet.";

        //Livres
        Book::create(['titre' => 'C++ par la pratique', 'auteur' => 'Domingo Salvador', 'edition' => 'DUNOD', 'ISBN' => '9782456987401', 'etat' => '1', 'description' => $lorem, 'fichier' => '/storage/book_uploads/livre1-auteur1.pdf']);
        Book::create(['titre' => 'Passion des Maths', 'auteur' => 'Santos Gari', 'edition' => 'Flammarion', 'ISBN' => '9782456987402', 'etat' => '1', 'description' => $lorem, 'fichier' => '/storage/book_uploads/livre2-auteur2.pdf']);
        Book::create(['titre' => 'Comment apprendre, pour les nuls', 'auteur' => 'Cahier Yamas', 'edition' => 'DUNOD', 'ISBN' => '9782456987403', 'etat' => '1', 'description' => $lorem, 'fichier' => '/storage/book_uploads/livre3-auteur3.pdf']);
        Book::create(['titre' => 'HTML5, CSS3 et Javascript', 'auteur' => 'Pilate Ponce', 'edition' => 'DUNOD', 'ISBN' => '9782456987404', 'etat' => '1', 'description' => $lorem, 'fichier' => '/storage/book_uploads/livre4-auteur4.pdf']);
        Book::create(['titre' => 'PHP à la conquête du monde', 'auteur' => 'Robert Rogo', 'edition' => 'Flamboyant', 'ISBN' => '9782456987405', 'etat' => '1', 'description' => $lorem, 'fichier' => '/storage/book_uploads/livre5-auteur5.pdf']);
        Book::create(['titre' => 'L\'incation des planètes', 'auteur' => 'Alpi Prog', 'edition' => 'DUNOD', 'ISBN' => '9782456987406', 'etat' => '1', 'description' => $lorem, 'fichier' => '/storage/book_uploads/livre6-auteur6.pdf']);
        Book::create(['titre' => 'Astro-physique', 'auteur' => 'Kad Store', 'edition' => 'DUNOD', 'ISBN' => '9782456987407', 'etat' => '1', 'description' => $lorem, 'fichier' => '/storage/book_uploads/livre7-auteur7.pdf']);
        Book::create(['titre' => 'Théorie des graphes et applications', 'auteur' => 'Marco Star', 'edition' => 'Lauriet', 'ISBN' => '9782456987408', 'etat' => '1', 'description' => $lorem, 'fichier' => '/storage/book_uploads/livre8-auteur8.pdf']);
        Book::create(['titre' => 'Les chaines de télévisions', 'auteur' => 'Lacrimus Optimus Roms', 'edition' => 'DUNOD', 'ISBN' => '9782456987409', 'etat' => '1', 'description' => $lorem, 'fichier' => '/storage/book_uploads/livre9-auteur9.pdf']);
        Book::create(['titre' => 'La télévision nationale terrestre', 'auteur' => 'Genedo Semado', 'edition' => 'DUNOD', 'ISBN' => '9782456987410', 'etat' => '1', 'description' => $lorem, 'fichier' => '/storage/book_uploads/livre10-auteur10.pdf']);

        $array = range(1, 24);
        for ($i = 1; $i <= 10; $i++) {
            shuffle($array);
            Book::find($i)->disciplines()->attach(array_slice($array, 0, rand(1, 12)));
        }

        //Documentation
        Matiere::create(['nom' => 'Anglais']);
        Matiere::create(['nom' => 'OS']);
        Matiere::create(['nom' => 'Fonction electronique']);


        Filiere::find(1)->matieres()->attach([2, 3]);
        Filiere::find(2)->matieres()->attach([1, 3]);

        Documentation::create(['nom' => 'titre1', 'fichier' => '/storage/doc_uploads/livre1-auteur1.pdf']);
        Documentation::create(['nom' => 'titre2', 'fichier' => '/storage/doc_uploads/livre2-auteur2.pdf']);
        Documentation::create(['nom' => 'titre3', 'fichier' => '/storage/doc_uploads/livre3-auteur3.pdf']);
        Documentation::create(['nom' => 'titre4', 'fichier' => '/storage/doc_uploads/livre4-auteur4.pdf']);
        Documentation::create(['nom' => 'titre5', 'fichier' => '/storage/doc_uploads/livre5-auteur5.pdf']);
        Documentation::create(['nom' => 'titre6', 'fichier' => '/storage/doc_uploads/livre6-auteur6.pdf']);

        Matiere::find(1)->documentations()->attach([1, 2, 3]);
        Matiere::find(2)->documentations()->attach([4, 5, 6]);
        Matiere::find(3)->documentations()->attach([1, 3, 5]);

        //Utilisateurs
        Utilisateur::create(['matricule' => 10000001, 'inscrit' => 1, 'firstName' => 'Admin', 'lastName' => 'Admin',  'email' => 'admin@gmail.com', 'filiere_id' => 3, 'password' => Hash::make('adminer')]);
    }
}
