<?php

namespace App\DataTables;

use App\Models\OccurrenceDatable;
use App\Traits\Api;
use Illuminate\Database\Eloquent\Builder as QueryBuilder;
use Illuminate\Support\Facades\Log;
use Yajra\DataTables\DataTableAbstract;
use Yajra\DataTables\EloquentDataTable;
use Yajra\DataTables\Html\Builder as HtmlBuilder;
use Yajra\DataTables\Html\Button;
use Yajra\DataTables\Html\Column;
use Yajra\DataTables\Html\Editor\Editor;
use Yajra\DataTables\Html\Editor\Fields;
use Yajra\DataTables\Services\DataTable;

class OccurrenceDatableDataTable extends DataTable
{
    use Api;
    /**
     * Build the DataTable class.
     *
     * @param QueryBuilder $query Results from query() method.
     */
    public function dataTable($query): DataTableAbstract
    {
        return datatables()
            ->collection($query)
            ->editColumn('priority', function ($query) {
                switch ($query->priority) {
                    case 1:
                        return '<button class="btn btn-sm btn-danger rounded-pill px-3">CRITICAL</button>';
                        break;
                    case 2:
                        return '<button class="btn btn-sm btn-warning rounded-pill px-3">MAJOR</button>';
                        break;
                    case 3:
                        return '<button class="btn btn-sm btn-dark rounded-pill px-3">MINOR</button>';
                        break;
                    case 4:
                        return '<button class="btn btn-sm btn-info rounded-pill px-3">WARNING</button>';
                        break;
                }
            })
            // ->editColumn('count')
            ->rawColumns(['priority']);
    }

    /**
     * Get the query source of dataTable.
     */
    public function query()
    {
        $duration = $this->request()->get('duration');
        $start_date = $this->request()->get('start_date');
        $end_date = $this->request()->get('end_date');

        $params = [
            'duration' => $duration,
            'start_date' => $start_date,
            'end_date' => $end_date,
        ];

        // dd($params);
        // Log::info('From DataTable'.json_encode($params));

        $query = $this->get(env('TICKETS_API_URL') . "/occurrence/tickets", $params);
        Log::info('', array($query));
        if ($query->api_code == 200)
            return collect($query->api_data);
        else
            return collect();
    }


    /**
     * Optional method if you want to use the html builder.
     */
    public function html(): HtmlBuilder
    {
        return $this->builder()
            ->setTableId('dataTable')
            ->columns($this->getColumns())
            ->minifiedAjax()
            ->dom('lBfrtip')
            // ->orderBy(2)
            ->selectStyleSingle()
            ->buttons([
                Button::make('excel'),
                Button::make('csv'),
                Button::make('pdf'),
                Button::make('print'),
            ]);
    }

    /**
     * Get the dataTable columns definition.
     */
    public function getColumns(): array
    {
        return [
            Column::make('priority'),
            Column::make('description')->title('Ticket Description'),
            Column::make('count')->title('Occurrences'),
            // Column::make('updated_at'),
        ];
    }

    /**
     * Get the filename for export.
     */
    protected function filename(): string
    {
        return 'OccurrenceDatable_' . date('YmdHis');
    }
}
