<?php

namespace App\Http\Controllers\Frontend;

use App\Http\Controllers\Controller;
use App\Libs\Support\Sanitizer\Sanitizer;
use Illuminate\Support\Facades\Validator;
use Twintag;

class TwintagController extends Controller
{
    public function postList()
    {
        $validator = Validator::make(
            request()->all(),
            array(
                'page' => 'required|integer|min:1',
                'rows' => 'required|integer|between:1,20',
                'search' => 'string|max:50',
                'level' => 'string|max:20',
                'type' => 'string|max:20'
            )
        );

        if ($validator->fails()) {
            return response()->json(array(
                "error" => "validation",
                "description" => "bad syntax",
                "validation" => $validator->messages()
            ), 400);
        }
        $rows = request()->input('rows');
        $page = request()->input('page');
        $type = request()->input('type');
        $level = request()->input('level');

        $sanitizer = new Sanitizer(['search' => request()->input('search')], ['search' => 'strip_tags|xss_clean|trim']);
        $sanitizedData = $sanitizer->sanitize();
        $searchString = $sanitizedData['search'];

        $query = Twintag::with(['twintagCompany']);

        if ($searchString) {
            $query->whereHas('twintagCompany', function ($query) use ($searchString) {
                $query->where('name', 'like', '%' . $searchString . '%');
            });
        }

        if ($type) {
            if ($type == 'Service') {
                $query->whereIn('type', ['event', 'Delivery']);
            } else {
                $query->where('type', $type);
            }
        }

        if ($level) {
            $query->where('level', $level);
        }

        $offset = $page === 1 ? 0 : ($page - 1) * $rows;

        $count = $query->count();

        $tags = $query->offset($offset)
            ->limit($rows)
            ->get();

        return view('frontend/templates/components/twintag_list', array(
            'tags' => $tags,
            'page' => $page,
            'total' => $count,
        ));
    }
}
