<?php

namespace App\Traits;

use App\Models\ActionUniteOeuvre;
use App\Models\Categorie;
use App\Models\Direction;
use App\Models\Domaine;
use App\Models\Famille;
use App\Models\ImputationBudgetaire;
use App\Models\Levier;
use App\Models\NiveauMutualisation;
use App\Models\OperateurMutualisation;
use App\Models\ProjetActionRespSocEnv;
use App\Models\Segment;
use App\Models\Service;
use App\Models\Structure;
use App\Models\Thematique;
use App\Models\User;
use Illuminate\Contracts\Session\Session;
use Illuminate\Support\Facades\Auth;

trait ProjetsListesOnglets
{
    /**
     * Récupère les éléments des différentes listes dans l'écran de création/modification d'un projet
     * @param projet_id id du projet qui permet de récupérer des listes spécifiques
     */
    private function getListesOnglets($projet_id = null)
    {
        // Onglet Création
        $nom_structure = Structure::where('id', Auth::user()->structure_id)->first()->nom;
        $champ_referentiel = Structure::where('id', Auth::user()->structure_id)->first()->champ_referentiel;
        $etablissements = Direction::where('structure_id', Auth::user()->structure_id)->pluck("nom", "id");
        $services_utilisateurs = Service::select('services.id', 'services.nom', 'services.direction_id')
                    ->join('directions', 'directions.id', '=', 'services.direction_id')
                    ->where('directions.structure_id', Auth::user()->structure_id)->get();
        $mutualisations = NiveauMutualisation::where('structure_id', Auth::user()->structure_id)->pluck("nom", "id");
        $centrales_achats = OperateurMutualisation::where('structure_id', Auth::user()->structure_id)->pluck("nom", "id");
        $imputations_budegetaires = ImputationBudgetaire::where('structure_id', Auth::user()->structure_id)->pluck("nom", "id");
        $familles = Famille::select('id', 'nom')->where('structure_id', Auth::user()->structure_id)->get();
        $domaines = Domaine::select('domaines.id', 'domaines.nom', 'domaines.famille_id')
                    ->join('familles', 'familles.id', 'domaines.famille_id')
                    ->where('familles.structure_id', Auth::user()->structure_id)->get();
        $categories = Categorie::select('categories.id', 'categories.nom', 'categories.domaine_id')
                    ->join('domaines', 'domaines.id', 'categories.domaine_id')
                    ->join('familles', 'familles.id', 'domaines.famille_id')
                    ->where('familles.structure_id', Auth::user()->structure_id)->get();
        $segments = Segment::select('segments.id', 'segments.nom', 'segments.categorie_id')
                    ->join('categories', 'categories.id', 'segments.categorie_id')
                    ->join('domaines', 'domaines.id', 'categories.domaine_id')
                    ->join('familles', 'familles.id', 'domaines.famille_id')
                    ->where('familles.structure_id', Auth::user()->structure_id)->get();


        $liste = [
            "nom_structure" => $nom_structure,
            'champ_referentiel' => $champ_referentiel,
            "etablissements" => $etablissements,
            "services_utilisateurs" => $services_utilisateurs,
            "mutualisations" => $mutualisations,
            "centrales_achats" => $centrales_achats,
            "imputations_budegetaires" => $imputations_budegetaires,
            "familles" => $familles,
            "domaines" => $domaines,
            'categories' => $categories,
            'segments' => $segments
        ];

        if (isset($projet_id)) {
            // Onglet Leviers
            $leviers = Levier::where('structure_id', Auth::user()->structure_id)->pluck("nom", "id");
            $liste["leviers"] = $leviers;

            // Onglet gestion projet
            $liste['users'] = User::where('structure_id', Auth::user()->structure_id)->where('active', true)->get();

            // Onglet Resp.Soc.Env
            $liste['thematiques'] = Thematique::where('structure_id', Auth::user()->structure_id)->get();
            $liste['actions_unite_oeuvre'] = ActionUniteOeuvre::orderBy('libelle')->get();
            $liste['actions_checked'] = ProjetActionRespSocEnv::select('action_id', 'action_unite_oeuvre_id', 'cible', 'notifie', 'realise')
                ->where('projet_id', $projet_id)
                ->get()
                ->keyBy('action_id')
                ->toArray()
            ;

            //Onglet Gestion projet
            if (Session::get('tache') != null) {
                $liste['tache'] = Session::get('tache');
            }
            // Onglet fichier
            if (Session::get('fichier') != null) {
                $liste['fichier'] = Session::get('fichier');
            }
        }

        return $liste;
    }
}
