<?php

namespace App\Livewire\Datatable\Studio\Catalog;

use App\Models\Category;
use App\Traits\Datatable\WithConfiguration;
use App\Traits\Datatable\WithPrependColumn;
use Illuminate\Database\Eloquent\Builder;
use Rappasoft\LaravelLivewireTables\DataTableComponent;
use Rappasoft\LaravelLivewireTables\Views\Column;

class CategoriesTable extends DataTableComponent
{
    use WithConfiguration, WithPrependColumn;

    protected $model = Category::class;

    public function columns(): array
    {
        return [
            Column::make('Nama', 'name')->searchable(),

            Column::make('Aksi')
                ->label(function ($row) {
                    $actions = '';
                    $maxSortOrder = Category::max('sort_order');

                    if (auth()->user()->can('update category')) {
                        if ($row->sort_order > 1) {
                            $actions .= view('components.datatables.sort-button', [
                                'id' => $row->hash,
                                'module' => 'category',
                                'direction' => 'up',
                                'tooltip' => 'Naik',
                                'color' => 'cyan',
                                'icon' => 'arrow-up',
                            ])->render();

                            $actions .= view('components.datatables.sort-button', [
                                'id' => $row->hash,
                                'module' => 'category',
                                'direction' => 'first',
                                'tooltip' => 'Pertama',
                                'color' => 'emerald',
                                'icon' => 'bars-arrow-up',
                            ])->render();
                        }

                        if ($row->sort_order < $maxSortOrder) {
                            $actions .= view('components.datatables.sort-button', [
                                'id' => $row->hash,
                                'module' => 'category',
                                'direction' => 'down',
                                'tooltip' => 'Turun',
                                'color' => 'orange',
                                'icon' => 'arrow-down',
                            ])->render();

                            $actions .= view('components.datatables.sort-button', [
                                'id' => $row->hash,
                                'module' => 'category',
                                'direction' => 'last',
                                'tooltip' => 'Terakhir',
                                'color' => 'rose',
                                'icon' => 'bars-arrow-down',
                            ])->render();
                        }
                    }

                    if (auth()->user()->can('update category')) {
                        $actions .= view('components.datatables.edit-modal', [
                            'id' => $row->hash,
                            'method' => 'update',
                            'modalTitle' => 'Ubah Kategori',
                        ])->render();
                    }

                    if (auth()->user()->can('delete category')) {
                        $actions .= view('components.datatables.delete', [
                            'id' => $row->hash,
                            'deleteRoute' => route('studio.catalog.category.delete', $row->hash),
                        ])->render();
                    }

                    return $actions;
                })
                ->html(),
        ];
    }

    public function builder(): Builder
    {
        return Category::select('id', 'name', 'sort_order')->orderBy('sort_order');
    }
}
