<?php

namespace App\Http\Controllers\Admin;

use App\Http\Controllers\Controller;
use App\Http\Requests\PublicationRequest;
use App\Models\Commune;
use App\Models\Forum;
use App\Models\Publication;
use App\Models\Participation;
use Illuminate\Http\Request;

class PublicationsController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
        if (auth()->user()->commune) {
            $ids = auth()->user()->commune->participations->pluck('id')->toArray();
            $publications = Publication::whereIN('participation_id', $ids)->get();
        } else {
            $publications = Publication::all();
        }

        return view('admin.publications.index', [ 
            'publications' => $publications, 
        ]);
    }

    /**
     * Show the form for creating a new resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function create()
    {
        $forums = Forum::where('pending', 1)->get();
        
        if (auth()->user()->commune) {
            $participations = Participation::where([
                ['forum_id', '=', $forums->first()->id],
                ['commune_id', '=', auth()->user()->commune->id],
            ])->get();
        } else {
            $participations = $forums->first()->participations;
        }

        return view('admin.publications.create', [
            'forums' => $forums,
            'participations' => $participations
        ]);
    }

    /**
     * Store a newly created resource in storage.
     *
     * @param  \App\Http\Requests\PublicationRequest  $request
     * @return \Illuminate\Http\Response
     */
    public function store(PublicationRequest $request)
    {
        Publication::create($request->getPublicationPayload());

        $request->file('name')->storeAs('public/publications', $request->getPublicationPayload()['filename']);

        return redirect()->route('publications.index');
    }

    /**
     * Display the specified resource.
     *
     * @param  \App\Model\Publication  $publication
     * @return \Illuminate\Http\Response
     */
    public function show(Publication $publication)
    {
        //
    }

    /**
     * Show the form for editing the specified resource.
     *
     * @param  \App\Model\Publication  $publication
     * @return \Illuminate\Http\Response
     */
    public function edit(Publication $publication)
    {
        $forums = Forum::where('pending', 1)->get();
        $participations = $forums->first()->participations;

        return view('admin.publications.edit', [
            'publication' => $publication,
            'forums' => $forums,
            'participations' => $participations
        ]);
    }

    /**
     * Update the specified resource in storage.
     *
     * @param  \App\Http\Requests\PublicationRequest  $request
     * @param  \App\Model\Publication  $publication
     * @return \Illuminate\Http\Response
     */
    public function update(PublicationRequest $request, Publication $publication)
    {
        $publication->update($request->getPublicationPayload());

        if ($request->file('name')) {
            $request->file('name')->storeAs('public/publications', $request->getPublicationPayload()['filename']);
        }

        return redirect()->route('publications.index');
    }

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