<?php

namespace App\PackagesAdmin\Capsule\DataTables;

use App\Packages\Capsule\Models\CapsuleComment;
use Illuminate\Http\JsonResponse;
use Yajra\DataTables\DataTables;

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

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

    /**
     * @return JsonResponse
     * @throws \Exception
     */
	public function getDataTable()
	{
		$query = CapsuleComment::query();

		return $this->dataTablesInstance
			->eloquent($query)
			->make();
	}

    /**
     * @param $id
     * @return JsonResponse
     * @throws \Exception
     */
    public function getCapsuleDataTable($id)
	{
		$query = CapsuleComment::query()
            ->with('user')
            ->where('capsule_id', $id);

		return $this->dataTablesInstance
            ->eloquent($query)
            ->addColumn('showLink', function ($comment) {
                return route('admin.user.show', ['id' => $comment->user_id]);
            })
            ->addColumn('editLink', function ($comment) {
                return route('admin.user.edit', ['id' => $comment->user_id]);
            })
            ->addColumn('deleteLink', function ($comment) {
                return route('admin.capsule.comment.destroy', ['id' => $comment->id]);
            })
            ->editColumn('content', function ($comment) {
                return (mb_strlen($comment->content) > 200) ? mb_substr($comment->content, 0, 200) . '...' : $comment->content;
            })
            ->make();
	}

    /**
     * @param $id
     * @return JsonResponse
     * @throws \Exception
     */
    public function getUserDataTable($id)
    {
        $query = CapsuleComment::query()
            ->where('user_id', $id);

        return $this->dataTablesInstance
            ->eloquent($query)
            ->addColumn('showLink', function ($comment) {
                return route('admin.capsule.show', ['id' => $comment->capsule_id]);
            })
            ->addColumn('editLink', function ($comment) {
                return route('admin.capsule.edit', ['id' => $comment->capsule_id]);
            })
            ->addColumn('deleteLink', function ($comment) {
                return route('admin.capsule.comment.destroy', ['id' => $comment->id]);
            })
            ->editColumn('content', function ($comment) {
                return (mb_strlen($comment->content) > 200) ? mb_substr($comment->content, 0, 200) . '...' : $comment->content;
            })
            ->make();
    }

}
