<?php

namespace App\Http\Controllers\Admin;

use App\Http\Controllers\Controller;
use App\Topic;
use Illuminate\Http\Request;
use Illuminate\Support\Arr;
use App\Language;
use App\Http\Resources\Admin\LanguageResource;
use Validator;

/**
 * Class LanguageController
 *
 * @package App\Http\Controllers
 */
class LanguageController extends Controller
{
    const ITEM_PER_PAGE = 100;

    public function index(Request $request)
    {
        $searchParams = $request->all();
        $list = Language::select('*');
        $limit = Arr::get($searchParams, 'limit', static::ITEM_PER_PAGE);
        $keyword = Arr::get($searchParams, 'keyword', '');

        if (!empty($keyword)) {
            $list->where(function ($query) use ($keyword) {
                $query->where('key', 'LIKE', '%' . $keyword . '%')
                    ->orWhere('en', 'LIKE', '%' . $keyword . '%')
                    ->orWhere('ja', 'LIKE', '%' . $keyword . '%')
                    ->orWhere('vi', 'LIKE', '%' . $keyword . '%');
            });
        }
        $list->orderBy('key');

        return LanguageResource::collection($list->paginate($limit));
    }

    public function show($id = 0)
    {
        $language = Language::where('id', $id)->first();
        if (!isset($language)) return response()->json(['errors' => 'Language is not valid'], 403);

        return new LanguageResource($language);
    }

    public function store(Request $request)
    {
        $validator = Validator::make($request->all(), ['key' => ['required']]);
        if ($validator->fails()) return response()->json(['errors' => $validator->errors()], 403);
        $params = $request->all();
        $language = Language::create([
            'key'        => $params['key'],
            'en'         => $params['en'],
            'ja'         => $params['ja'],
            'vi'         => $params['vi'],
            'created_at' => date('Y-m-d H:i:s'),
            'updated_at' => date('Y-m-d H:i:s')
        ]);

        return new LanguageResource($language);
    }

    public function update($id = 0, Request $request)
    {
        $validator = Validator::make($request->all(), ['key' => ['required']]);
        if ($validator->fails()) return response()->json(['errors' => $validator->errors()], 403);

        $language = Language::where('id', $id)->first();
        if (!isset($language)) return response()->json(['errors' => 'Language is not valid'], 403);

        $params = $request->all();
        $language->update([
            'key'        => $params['key'],
            'en'         => $params['en'],
            'ja'         => $params['ja'],
            'vi'         => $params['vi'],
            'updated_at' => date('Y-m-d H:i:s')
        ]);

        return response()->json(null, 204);
    }

    public function destroy($id = 0)
    {
        $language = Language::where('id', $id)->first();
        if (!isset($language)) response()->json(['error' => 'Ehhh! Can not delete this language'], 403);
        $language->delete();

        return response()->json(null, 204);
    }

    public function destroyMultiple(Request $request)
    {
        $validator = Validator::make($request->all(), ['ids' => 'required']);
        if ($validator->fails()) return response()->json(['errors' => $validator->errors()], 403);

        $listIds = $request->get('ids', []);
        $categories = Language::whereIn('id', $listIds)->get();
        if ($categories->count() <= 0) response()->json(['error' => 'Language is not valid.'], 403);

        try {
            Language::whereIn('id', $listIds)->delete();
        } catch (\Exception $ex) {
            response()->json(['error' => $ex->getMessage()], 403);
        }

        return response()->json(null, 204);
    }
}
