<?php

namespace App\Http\Controllers\Admin;

use App\Http\Controllers\Controller;
use App\Http\Requests\CommuneRequest;
use App\Models\Commune;
use App\Models\Forum;
use App\Models\Target;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;

class CommunesController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
        $communes = Commune::query()
            ->join('participations', 'communes.id', 'participations.commune_id')
            ->get();

        return view('admin.communes.index', [ 
            'communes' => $communes, 
            'departments' => config('odd.departments')
        ]);
    }

    /**
     * Show the form for creating a new resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function create()
    {
        return view('admin.communes.create', [
            'departments' => config('odd.departments'),
            'targets'     => Target::all()
        ]);
    }

    /**
     * Store a newly created resource in storage.
     *
     * @param  \App\Http\Requests\CommuneRequest  $request
     * @return \Illuminate\Http\Response
     */
    public function store(CommuneRequest $request)
    {
        $commune = Commune::create($request->getCommunePayload());
        $commune->targets()->sync($request->targets);
        return redirect()->route('communes.index');
    }

    /**
     * Display the specified resource.
     *
     * @param  \App\Model\Commune  $commune
     * @return \Illuminate\Http\Response
     */
    public function show(Commune $commune)
    {
        // return $commune->targets;

        return view('admin.communes.show', [ 
            'commune' => $commune, 
            'participations' => $commune->participations,
            'spatialisations' => $commune->spatialisations,
            'forums' => Forum::where('enabled', 1)->get(), 
            'targets' => Target::all(), 
            'targets' => $commune->targets,
        ]);
    }

    /**
     * Show the form for editing the specified resource.
     *
     * @param  \App\Model\Commune  $commune
     * @return \Illuminate\Http\Response
     */
    public function edit(Commune $commune)
    {
        return view('admin.communes.edit', [
            'commune' => $commune,
            'departments' => config('odd.departments'),
            'targets'     => Target::all()
        ]);
    }

    /**
     * Update the specified resource in storage.
     *
     * @param  \App\Http\Requests\CommuneRequest  $request
     * @param  \App\Model\Commune  $commune
     * @return \Illuminate\Http\Response
     */
    public function update(Request $request, Commune $commune)
    {
        $commune->update($request->toArray());
        $commune->targets()->sync($request->targets);
        return redirect()->route('communes.index');
    }

    /**
     * Remove the specified resource from storage.
     *
     * @param  \App\Model\Commune  $commune
     * @return \Illuminate\Http\Response
     */
    public function destroy(Commune $commune)
    {
        //
    }
}
