<?php

namespace App\Http\Livewire;

use App\Models\Participation;
use App\Models\Commune;
use App\Models\Forum;
use App\Http\Livewire\Datatable;
use App\View\Datatable\Column;
use App\View\Datatable\BooleanColumn;
use App\View\Datatable\NumberColumn;


class ParticipationTable extends DataTable
{
    public function builder()
    {
        if (auth()->user()->commune) {
            return Participation::query()
                ->leftJoin('forums', 'forums.id', 'participations.forum_id')
                ->leftJoin('communes', 'communes.id', 'participations.commune_id')
                ->where('communes.id', auth()->user()->commune['id'])
            ;
        }
        return Participation::query()
            ->leftJoin('forums', 'forums.id', 'participations.forum_id')
            ->leftJoin('communes', 'communes.id', 'participations.commune_id')
        ;
    }

    public function columns()
    {
        return [
            Column::name('forums.annee')
                ->label('Forum')
                ->searchable(),

            Column::name('communes.name')
                ->label('Commune')
                ->searchable(),

            Column::name('communes.department_id')
                ->label('Département')
                ->view('components.datatable.includes.department'),

            Column::name('confirmed')
                ->label('Confirmé')
                ->callback(['id', 'communes.name', 'confirmed'], function ($id, $commune, $confirmed) {
                    return view('admin.participations.modal.button', ['id' => $id, 'commune' => $commune, 'confirmed' => $confirmed]);
                })->unsortable(),

            Column::name('pf_name')
                ->label('Point Focal')
                ->searchable(),

            Column::callback(['id'], function ($id) {
                return view('components.table-actions', ['id' => $id, 'permissions' => ['participations.edit']]);
            })->unsortable()
        ];
    }

    public function getCommunesProperty()
    {
        return Commune::all();
    }
}