<?php

namespace App\DataTables;

// use App\Models\Opened;
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 OpenedDataTable 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('opener', function ($query) {
                return $query->opener?->first_name . ' ' . $query->opener?->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('opened_at', function ($query) {
                return date('M j, Y g:i A', strtotime($query->opened_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/opened',$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('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('opener')->title('Opened By'),
            Column::make('created_at'),
            Column::make('opened_at'),
            Column::computed('action')
                ->exportable(false)
                ->printable(false)
                ->width(100)
                ->addClass('text-center'),
        ];
    }

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