<?php

namespace App\Http\Controllers\Parametres;

use App\Http\Controllers\Parametres\Base\ParametreBaseController;
use App\Http\Requests\Parametres\StoreRequest;
use App\Http\Requests\Parametres\UpdateRequest;
use App\Models\PortefeuilleResponsableAchat;
use App\Models\Structure;
use APPLICATION;

class PortefeuilleResponsableAchatController extends ParametreBaseController
{
    public function __construct()
    {
        parent::__construct('portefeuilles-responsables-achats');
    }

    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Contracts\Foundation\Application|\Illuminate\Contracts\View\Factory|\Illuminate\Contracts\View\View|\Illuminate\Http\Response
     */
    public function index()
    {
        return view('parametres.portefeuilles-responsables-achats.index', [
            'parametres' => PortefeuilleResponsableAchat::where('structure_id', $this->_structure_id)->paginate(APPLICATION::ITEMS_PER_PAGE),
            'parent' => Structure::find($this->_structure_id),
            'route' => $this->_route,
            'has_enfant' => true,
            'route_enfant' => 'portefeuilles-acheteurs',
        ]);
    }

    /**
     * Show the form for creating a new resource.
     *
     * @return \Illuminate\Contracts\Foundation\Application|\Illuminate\Contracts\View\Factory|\Illuminate\Contracts\View\View|\Illuminate\Http\Response
     */
    public function create()
    {
        return view('parametres.portefeuilles-responsables-achats.create', [
            'parent' => Structure::find($this->_structure_id),
            'type_parent' => $this->_type_parent,
            'route' => $this->_route
        ]);
    }

    /**
     * Store a newly created resource in storage.
     *
     * @param StoreRequest $request
     * @return \Illuminate\Http\RedirectResponse
     */
    public function store(StoreRequest $request)
    {
        $validated = $request->validated();

        PortefeuilleResponsableAchat::firstOrCreate(array_merge(
            $validated,
            ['structure_id' => $this->_structure_id]
        ));
        return redirect()->route('portefeuilles-responsables-achats.index')->with('success', 'Portefeuille responsable achat ajouté avec succès.');
    }

    /**
     * Display the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function show($id)
    {
        //
    }

    /**
     * Show the form for editing the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Contracts\Foundation\Application|\Illuminate\Contracts\View\Factory|\Illuminate\Contracts\View\View|\Illuminate\Http\Response
     */
    public function edit($id)
    {
        $portefeuilleResponsableAchat = PortefeuilleResponsableAchat::find($id);
        if (isset($portefeuilleResponsableAchat)) {
            if ($portefeuilleResponsableAchat->structure_id == $this->_structure_id) {
                return view('parametres.portefeuilles-responsables-achats.edit', [
                    'parametre' => $portefeuilleResponsableAchat,
                    'parent' => Structure::find($this->_structure_id),
                    'type_parent' => $this->_type_parent,
                    'route' => $this->_route
                ]);
            } else {
                abort(403);
            }
        } else {
            abort(404);
        }
    }

    /**
     * Update the specified resource in storage.
     *
     * @param UpdateRequest $request
     * @param int $id
     * @return \Illuminate\Http\RedirectResponse
     */
    public function update(UpdateRequest $request, $id)
    {
        $portefeuilleResponsableAchat = PortefeuilleResponsableAchat::find($id);
        if (isset($portefeuilleResponsableAchat)) {
            if ($portefeuilleResponsableAchat->structure_id == $this->_structure_id) {
                $validated = $request->validated();
                $portefeuilleResponsableAchat->update($validated);
                return redirect()->route('portefeuilles-responsables-achats.index')->with('success', 'Portefeuille responsable achat mis à jour avec succès.');
            } else {
                abort(403);
            }
        } else {
            abort(404);
        }
    }

    /**
     * Remove the specified resource from storage.
     *
     * @param  int  $id
     * @return \Illuminate\Http\RedirectResponse
     */
    public function destroy($id)
    {
        $portefeuilleResponsableAchat = PortefeuilleResponsableAchat::find($id);
        if (isset($portefeuilleResponsableAchat)) {
            if ($portefeuilleResponsableAchat->structure_id == $this->_structure_id) {
                if ($portefeuilleResponsableAchat->portefeuilles_acheteurs()->count() > 0) {
                    return redirect()->back()->withErrors('Impossible de supprimer le portefeuille responsable achat car des portefeuilles acheteurs y sont attachés.');
                }
                if ($portefeuilleResponsableAchat->users->count() > 0) {
                    return redirect()->back()->withErrors('Impossible de supprimer le portefeuille responsable achat car des utilisateurs l\'utilise.');
                }
                $portefeuilleResponsableAchat->delete();
                return redirect()->route('portefeuilles-responsables-achats.index')->with('success', 'Portefeuille responsable achat supprimé avec succès.');
            } else {
                abort(403);
            }
        } else {
            abort(404);
        }
    }
}
