<?php

namespace App\DataTables;

use App\User;
use Carbon\Carbon;
use Illuminate\Database\Eloquent\Builder;
use Yajra\DataTables\DataTableAbstract;
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 ChimpReportDataTable extends DataTable
{
    /**
     * Build DataTable class.
     *
     * @param mixed $query Results from query() method.
     * @return DataTableAbstract
     */
    public function dataTable($query)
    {
        return datatables()
            ->eloquent($query)
            ->editColumn('status', function ($query){
                return empty($query->status) ? 'N/A' : ucfirst($query->status);
            })
            ->addColumn('user_mailing_list_id', function ($query){
                return '<a href="">'.($query->user_mailing_list->name ?? null).'</a>';
            })
            ->addColumn('action', function ($query){
                $route = !$this->user ? route('email.campaigns.report.view',$query->id) : route('chimp.client.campaign.view',$this->user);
                return '<div class="btn-group btn-group-sm">'.
                    '<a class="btn '.($query->is_sent ? 'btn-warning mr-3':'btn-warning mr-3 disabled').'"
                        title="Send Campaign Mail"   href="'.$route.'"><i class="fa fa-envelope-open"></i>
                        </a>'.
                    '</div>';
            })->rawColumns(['user_mailing_list_id','action']);
    }


    public function query()
    {
        $from  =  $this->request()->get('from_date');
        $to    =  $this->request()->get('to_date');
        $user  =   $this->user;
        $query = auth()->user()->user_email_campaigns()->newQuery()->whereNotNull('schedule_at');
            if(!empty($from) && !empty($to)) {

                $from   = Carbon::parse($from);
                $to     = Carbon::parse($to);
                $toAddDay = Carbon::parse($to)->addDays(1);
                $query  = $query->whereBetween('updated_at',[$from,$toAddDay])->latest();
            }
            elseif (!empty($user))
            {
                $query  = User::query()->find($user)->user_email_campaigns()->newQuery()->whereNotNull('schedule_at');
            }
        return $query->latest();
    }

    public function send($query)
    {
        return $query->is_sent ? " return confirm('Are you sure you want to resend this campaign')"  : "return confirm('Are you sure you want to send campaign ?')";
    }

    public function html()
    {
        return $this->builder()
                    ->setTableId('chimpreportdatatable-table')
                    ->columns($this->getColumns())
                    ->minifiedAjax()
                    ->dom('Bfrtip')
                    ->orderBy(1)
                    ->buttons(
                        Button::make('export'),
                        Button::make('print'),
                        Button::make('reset'),
                        Button::make('reload')
                    );
    }


    protected function getColumns()
    {
        return [
            Column::make('user_mailing_list_id')->title('Mailing List'),
            Column::make('subject'),
            Column::make('from_name'),
            Column::make('reply_to'),
            Column::make('created_at'),
            Column::make('schedule_at'),
            Column::make('count')->title('Times Sent'),
            Column::make('status'),
            Column::computed('action')
                ->exportable(false)
                ->printable(false)
                ->width(100)
                ->addClass('text-center'),

        ];
    }

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