<?php

namespace App\DataTables;

// use App\Models\Escalated;
use Illuminate\Database\Eloquent\Builder as QueryBuilder;
use Yajra\DataTables\DataTableAbstract;
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;
use App\Traits\Api;
use Carbon\Carbon;

class EscalatedDataTable 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('escalatedto',function ($query){
                return $query->escalatedto?->first_name.' '.$query->escalatedto?->last_name;
            })
            ->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('type',function($query){
                return ($query->type == 'ISSUE')?'<span class="text-danger">'.$query->type.'</span>':'<span class="text-info">'.$query->type.'</span>';
            })
            ->editColumn('created_at',function($query){
                return date('M j, Y g:i A',strtotime($query->created_at));
            })
            ->editColumn('escalated_at',function($query){
                return date('M j, Y g:i A',strtotime($query->escalated_at));
            })
            ->editColumn('action', function($query){
                return '
                    <a href="' . route('tickets.show', ['ticket_id' => $query->id]) . '" class="btn btn-sm btn-info" data-bs-toggle="tooltip" data-bs-placement="bottom" title="View ticket">
                        <i class="fas fa-eye"></i>
                    </a>
                    <a href="'.route('tickets.confirm.escalate',['ticket_id'=>$query->id]).'" class="btn btn-sm btn-success" data-bs-toggle="tooltip" data-bs-placement="bottom" title="Escalate ticket">
                        <i class="fas fa-share"></i>
                    </a>
                    <a href="'. route('tickets.confirm.close',['ticket_id'=>$query->id]).'" class="btn btn-danger btn-sm" data-bs-toggle="tooltip" data-bs-placement="bottom" title="Close ticket" >
                        <i class="fas fa-times"></i>
                    </a>
                ';
            })
            ->rawColumns(['priority','type','action']);
    }

    /**
     * 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,
        ];

        $query = $this->get(env('TICKETS_API_URL').'/all/escalated',$params);

        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(6)
                    ->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('title'),
            Column::make('priority'),
            Column::make('type'),
            Column::make('escalatedto')->title('Escalated To'),
            Column::make('created_at'),
            Column::make('escalated_at'),
            Column::computed('action')
                  ->exportable(false)
                  ->printable(false)
                  ->width(100)
                  ->addClass('text-center')
        ];
    }

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