<?php

namespace App\PackagesAdmin\Support\DataTables;

use App\Packages\Core\Models\Report;
use App\Packages\User\Models\User;
use Illuminate\Http\JsonResponse;
use Yajra\DataTables\DataTables;

/**
 * Class SupportDataTable
 * @package App\PackagesAdmin\Support\DataTables
 */
class SupportDataTable
{
    /**  @var DataTables */
    private $dataTablesInstance;

    /**
     * SupportDataTable constructor.
     * @param DataTables $dataTablesInstance
     */
    public function __construct(Datatables $dataTablesInstance)
    {
        $this->dataTablesInstance = $dataTablesInstance;
    }

    /**
     * @return JsonResponse
     * @throws \Exception
     */
    public function getDataTable()
    {
        $report_table = (new Report())->getTable();
        $user_table = (new User())->getTable();

        $query = \DB::table($report_table . ' as rep')
            ->select([
                'rep.id',
                'rep.report_type',
                'rep.content',
                'user.nickname',
                'user.email',
                'user.phone_number',
                'rep.status',
                'rep.created_at'
            ])
            ->leftJoin($user_table . ' as user', 'user.id', '=', 'rep.user_id');

        return $this->dataTablesInstance
            ->queryBuilder($query)
            ->editColumn('report_type', function ($report) {
                if ($report->report_type == Report::TYPE_PROBLEM) {
                    return "<span class='label label-danger'>" . trans('admin.support.type_name.problem') . "</span>";
                }
                if ($report->report_type == Report::TYPE_FEEDBACK) {
                    return "<span class='label label-info'>" . trans('admin.support.type_name.feedback') . "</span>";
                }
            })
            ->editColumn('status', function ($report) {
                if ($report->status == Report::STATUS_CLOSED) {
                    return "<span class='label label-success'>" . trans('admin.support.status_name.closed') . "</span>";
                }
                if ($report->status == Report::STATUS_OPEN) {
                    return "<span class='label label-info'>" . trans('admin.support.status_name.open') . "</span>";
                }
            })
            /*->filterColumn('status', function ($query, $keyword) {
                if ($keyword == Report::STATUS_OPEN) {
                    $query->whereRaw('rep.status isnull');
                }
                if ($keyword == Report::STATUS_CLOSED) {
                    $query->whereRaw('rep.status notnull');
                }
            })*/
            ->editColumn('content', function ($report) {
                return (mb_strlen($report->content) > 200) ? mb_substr($report->content, 0, 200) . '...' : $report->content;
            })
            ->rawColumns(['report_type', 'status'])
            ->addColumn('showLink', function ($report) {
                return route('admin.support.show', ['id' => $report->id]);
            })
            ->addColumn('statusLink', function ($report) {
                return route('admin.support.toggle_status', ['id' => $report->id]);
            })
            ->addColumn('deleteLink', function ($report) {
                return route('admin.support.destroy', ['id' => $report->id]);
            })
            ->make();
    }

}
