<?php

namespace App\Http\Controllers\Api;

use App\Http\Controllers\Controller;
use App\Http\Requests\Api\BaseShow;
use App\Http\Requests\Api\StaticDataTableIndex;
use App\Http\Resources\StaticDataTableListResource;
use App\Http\Resources\StaticDataTableResource;
use App\Models\StaticDataTable;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Resources\Json\JsonResource;

class StaticDataTableController extends Controller
{
    /**
     * Display the specified resource.
     *
     * @param StaticDataTableIndex $request
     * @return JsonResource|JsonResponse
     */
    public function index(StaticDataTableIndex $request)
    {
        $data = $request->validated();

        $query = StaticDataTable::full()
            ->select('static_data_tables.*', 'static_data_table_languages.*')
            ->where('status', 'published');

        if (!empty($data['filterBy'])) {
            $query->where('table_type', $data['filterBy']);
        }

        $query->orderBy('position', 'asc');

        // switch ($data['orderBy']) {
        //     case 'alphabetical':
        //         $query->orderBy('title', 'asc');
        //         break;
        //     default:
        //         # latest
        //         $query->orderByRaw('static_data_tables.created_at DESC');
        //         break;
        // }

        $perPage = $data['perPage'] ?? 12;
        $page = $data['page'] ?? 1;

        $staticDataTables = $query->paginate($perPage, ['*'], 'page', $page);

        $paginationData = [
            'currentPage' =>  intval($staticDataTables->currentPage()),
            'lastPage' => intval($staticDataTables->lastPage()),
            'perPage' =>  intval($staticDataTables->perPage()),
            'total' =>  intval($staticDataTables->total()),
            'count' =>  intval($staticDataTables->count()),
            'hasMorePages' => $staticDataTables->hasMorePages(),
            'nextPageUrl' => $staticDataTables->nextPageUrl(),
            'prevPageUrl' => $staticDataTables->previousPageUrl(),
        ];

        if ($staticDataTables) {
            return [
                'data' => StaticDataTableListResource::collection($staticDataTables),
                'pagination' => $paginationData,
            ];
        }
        return response()->json([], 404);
    }

    /**
     * Display the specified resource.
     *
     * @param BaseShow $request
     * @return JsonResource|JsonResponse
     */
    public function show(BaseShow $request)
    {
        $data = $request->validated();

        $query = StaticDataTable::full()
            ->select('static_data_tables.*', 'static_data_table_languages.*')
            ->where('status', 'published')
            ->where('lang_slug', $data['slug']);

        $staticDataTable = $query->first();

        if ($staticDataTable) {
            return new StaticDataTableResource($staticDataTable);
        }

        return response()->json([], 404);
    }
}
