<?php

namespace App\DataTables;

// use App\Models\Pending;
use Illuminate\Database\Eloquent\Builder as QueryBuilder;
use Yajra\DataTables\DataTableAbstract;
use Illuminate\Support\Str;
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;


// use Illuminate\Support\Facades\Log;

class PendingDataTable 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('creator',function($query){
                return $query->creator?->first_name.' '.$query->creator?->last_name;
            })
            ->editColumn('assignedto',function($query){
                return $query->assignedto? $query->assignedto->first_name.' '.$query->assignedto->last_name : 'N/A';
            })
            ->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('action', function($query){
                return '
                    <a href="' . route('tickets.show', ['ticket_id' => $query->id]) . '" class="btn btn-sm btn-info mx-1" data-bs-toggle="tooltip" data-bs-placement="bottom" title="View ticket">
                        <i class="fas fa-eye"></i>
                    </a>
                    <a href="' . route('tickets.open', ['ticket_id' => $query->id]) . '" class="btn btn-sm btn-success mx-1" data-bs-toggle="tooltip" data-bs-placement="bottom" title="Open ticket">
                        <i class="fas fa-folder-open"></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,
        ];

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

        $query = $this->get(env('TICKETS_API_URL') . "/all/pending",$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(5)
                    ->selectStyleSingle()
                    ->buttons([
                        Button::make('csv'),
                        Button::make('excel'),
                        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('creator')->title('Created By'),
            Column::make('assignedto')->title('Assigned To'),
            Column::make('created_at'),
            Column::computed('action')
                  ->exportable(false)
                  ->printable(false)
                  ->width(100)
                  ->addClass('text-center'),
        ];
    }

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