<?php

namespace App\DataTables;

use App\Models\Alert;
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 AlertsDataTable 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('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) {
                $secondBtn = '';
                if($query->status == 'OPENED' || $query->status == 'ESCALATED'){
                    $secondBtn = ' <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>';
                }elseif ($query->status == 'PENDING') {
                    # code...
                   $secondBtn = '<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>';
                }elseif ($query->status == 'CLOSED') {
                    $secondBtn = ' <a href="' . route('tickets.confirm.validate', ['ticket_id' => $query->id]) . '" class="btn btn-primary btn-sm" data-bs-toggle="tooltip" data-bs-placement="bottom" title="Validate ticket" >
                    <i class="fas fa-check"></i>
                </a>';
                }
                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>
                '.$secondBtn;
            })
            ->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/alerts',$params);

        // dd($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(6)
            ->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('type'),
            Column::make('description'),
            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 'Closed_' . date('YmdHis');
    }
}
