<?php

namespace App\DataTables;

use App\MediaPrice;
use App\UssdPrice;
use Yajra\DataTables\DataTableAbstract;
use Yajra\DataTables\Html\Builder;
use Yajra\DataTables\Html\Button;
use Yajra\DataTables\Html\Column;
use Yajra\DataTables\Services\DataTable;
use Yajra\DataTables\Html\Editor\Fields;
use Yajra\DataTables\Html\Editor\Editor;

class USSDPricePerBalanceDataTable extends DataTable
{
    protected $user = null;
    /**
     * Build DataTable class.
     *
     * @param mixed $query Results from query() method.
     * @return DataTableAbstract
     */
    public function dataTable($query)
    {
        return datatables()
            ->eloquent($query)
            ->addColumn('action', function ($query){
                return '<div class="btn-group">'
                    .'<a class="btn btn-info btn-sm" href="'.route($this->reRoute()->edit,$query->id).'"><i class="fa fa-pencil"></i></a>'
                    .'<a class="btn btn-danger btn-sm disabled" onclick="return confirm(\'Are you sure you want to delete ?\')" href="'.route($this->reRoute()->delete,$query->id).'"><i class="fa fa-trash"></i></a>'
                    .'</div>';
            })
            ->editColumn('is_active', function ($query){
                return $query->is_active ? '<span class="badge badge-success">True</span>': '<span class="badge badge-danger">False</span>' ;
            })->editColumn('no_contacts', function ($query){
                return number_format($query->no_contacts);
            })->editColumn('no_audience', function ($query){
                return number_format($query->no_audience);
            })->editColumn('pricing', function ($query){
                return $this->user  ? '' : '₵ '. number_format($query->pricing,2);
            })
            ->rawColumns(['is_active','action']);
    }

    public function query(UssdPrice $model)
    {
        return $model->newQuery()->where('user_id',$this->user);
    }

    public function is_reseller()
    {
        return auth()->user()->role_id == 3;
    }

    public function user($user)
    {
        $this->user = $user;
        return $this;

    }


    public function reRoute()
    {

        $route = empty($this->user) ? [ 'edit'=>'admin.email.price.setup.edit','delete'=>'admin.email.price.setup.delete']
            : [ 'edit'=>'reseller.ussd.price.setup.edit','delete'=>'reseller.ussd.price.setup.delete'];

        return  (object)$route;
    }

    /**
     * Optional method if you want to use html builder.
     *
     * @return Builder
     */
    public function html()
    {
        return $this->builder()
            ->setTableId('emailpriceperbalancedatatable-table')
            ->columns($this->getColumns())
            ->minifiedAjax()
            ->dom('Bfrtip')
            ->orderBy(1)
            ->buttons(
                Button::make('create'),
                Button::make('export'),
                Button::make('print'),
                Button::make('reset'),
                Button::make('reload')
            );
    }

    /**
     * Get columns.
     *
     * @return array
     */
    protected function getColumns()
    {
        return [
            Column::make('name'),
            $this->user ? Column::make('cost')->hidden() : Column::make('cost'),
            Column::make('sessions')->title('No. sessions'),
            Column::make('apply_to'),
            Column::make('is_active'),
            Column::make('created_at'),
            Column::computed('action')
                ->exportable(false)
                ->printable(false)
                ->width(60)
                ->addClass('text-center'),
        ];
    }

    /**
     * Get filename for export.
     *
     * @return string
     */
    protected function filename()
    {
        return 'USSDPricePerBalance_' . date('YmdHis');
    }
}
