<?php

namespace App\Livewire\Admin;

use App\Models\Rooms;
use Illuminate\Support\Carbon;
use Illuminate\Database\Eloquent\Builder;
use PowerComponents\LivewirePowerGrid\Button;
use PowerComponents\LivewirePowerGrid\Column;
use PowerComponents\LivewirePowerGrid\Facades\Filter;
use PowerComponents\LivewirePowerGrid\Facades\PowerGrid;
use PowerComponents\LivewirePowerGrid\PowerGridFields;
use PowerComponents\LivewirePowerGrid\PowerGridComponent;

final class RoomsTable extends PowerGridComponent
{
    public string $tableName = 'rooms-table-tsjlhj-table';

    public function setUp(): array
    {
        $this->showCheckBox();

        return [
            PowerGrid::header()
                ->showSearchInput(),
            PowerGrid::footer()
                ->showPerPage()
                ->showRecordCount(),
        ];
    }

    public function datasource(): Builder
    {
        return Rooms::query();
    }

    public function relationSearch(): array
    {
        return [];
    }

    public function fields(): PowerGridFields
    {
        return PowerGrid::fields()
            ->add('id')
            ->add('branch_id')
            ->add('name')
            ->add('internal_ip')
            ->add('port')
            ->add('status')
            ->add('started_at_formatted', fn (Rooms $model) => Carbon::parse($model->started_at)->format('d/m/Y H:i:s'))
            ->add('ended_at_formatted', fn (Rooms $model) => Carbon::parse($model->ended_at)->format('d/m/Y H:i:s'))
            ->add('created_at_formatted', fn (Rooms $model) => Carbon::parse($model->created_at)->format('d/m/Y H:i:s'));
    }

    public function columns(): array
    {
        return [
            Column::make('Id', 'id'),
            Column::make('Branch id', 'branch_id'),
            Column::make('Name', 'name')
                ->sortable()
                ->searchable(),

            Column::make('Internal ip', 'internal_ip')
                ->sortable()
                ->searchable(),

            Column::make('Port', 'port'),
            Column::make('Status', 'status')
                ->sortable()
                ->searchable(),

            Column::make('Started at', 'started_at_formatted', 'started_at')
                ->sortable(),

            Column::make('Ended at', 'ended_at_formatted', 'ended_at')
                ->sortable(),

            Column::make('Created at', 'created_at_formatted', 'created_at')
                ->sortable(),

            Column::action('Action')
        ];
    }

    public function filters(): array
    {
        return [
            Filter::datetimepicker('started_at'),
            Filter::datetimepicker('ended_at'),
            Filter::datetimepicker('created_at'),
        ];
    }

    #[\Livewire\Attributes\On('edit')]
    public function edit($rowId): void
    {
        $this->js('alert('.$rowId.')');
    }

    public function actions(Rooms $row): array
    {
        return [
            Button::add('edit')
                ->slot('Edit: '.$row->id)
                ->id()
                ->class('pg-btn-white dark:ring-pg-primary-600 dark:border-pg-primary-600 dark:hover:bg-pg-primary-700 dark:ring-offset-pg-primary-800 dark:text-pg-primary-300 dark:bg-pg-primary-700')
                ->dispatch('edit', ['rowId' => $row->id])
        ];
    }

    /*
    public function actionRules($row): array
    {
       return [
            // Hide button edit for ID 1
            Rule::button('edit')
                ->when(fn($row) => $row->id === 1)
                ->hide(),
        ];
    }
    */
}
