<?php

namespace App\Tables;

use App\Models\Projet;
use Okipa\LaravelTable\Abstracts\AbstractTable;
use Okipa\LaravelTable\Table;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Str;
use TEXT;

class ProjetsTable extends AbstractTable
{
    protected $_ids;

    public function __construct(Builder $projets)
    {
        $this->_ids = $projets->pluck('id')->toArray();
    }

    /**
     * Configure the table itself.
     *
     * @return \Okipa\LaravelTable\Table
     * @throws \ErrorException
     */
    protected function table(): Table
    {
        return (new Table())
            ->identifier('table-performance-economique')
            ->model(Projet::class)
            ->routes([
                'index'   => ['name' => 'home.refresh_table']
            ])
            ->query(function (Builder $query) {
                $query->whereIn('id', $this->_ids);
            });
    }

    /**
     * Configure the table columns.
     *
     * @param \Okipa\LaravelTable\Table $table
     *
     * @throws \ErrorException
     */
    protected function columns(Table $table): void
    {
        $table->column('objet')->title('Objet')->sortable();
        $table->column('acheteur')->title('Acheteur')->html(fn (Projet $p) => $p->acheteur->nom_complet());
        $table->column('direction')->title('Etab.')->html(fn (Projet $p) => $p->direction->nom);
        $table->column('montant_reference')->title('Montant de référence')->html(fn (Projet $p) => $p->montant_reference ? '<span class="autonumeric">' . $p->montant_reference . '</span> €' : '-')->sortable();
        $table->column('gains_cible')->title('Gains cibles')->html(fn (Projet $p) => $p->gains_cible ? '<span class="autonumeric">' . $p->gains_cible . '</span> €' : '-')->sortable();
        $table->column('gains_notifie')->title('Gains notifiés')->html(fn (Projet $p) => $p->gains_notifie ? '<span class="autonumeric">' . $p->gains_notifie . '</span> €' : '-')->sortable();
        $table->column('risque')->title('Risque')->html(fn (Projet $p) => TEXT::FORMATTED_TEXT[$p->risque])->sortable();
    }
}
