<?php

namespace App\Http\Controllers;

use App\Http\Resources\ShopResource;
use App\Indexer\ShopFrontIndex;
use Illuminate\Http\Request;
use Illuminate\Support\Arr;
use Illuminate\Support\Facades\URL;
use Illuminate\Support\Facades\Cache;
use DB;

class ShopIndexController extends Controller
{
    const ITEM_PER_PAGE = 10;

    public function index(Request $request)
    {
        $searchParams = $request->all();
        $limit = Arr::get($searchParams, 'limit', static::ITEM_PER_PAGE);
        $list = ShopFrontIndex::select('id', 'name', 'logo', 'station', 'address')->orderBy('order_list');
        $result = $this->_data($list, $limit);

        return response()->json($result, 200);
    }

    protected function _data($query, $limit)
    {
        $currentPage = isset($_GET['page']) ? (int)$_GET['page'] : 1;
        $total = $query->count();
        $totalPage = floor($total / $limit);
        $totalPage += (($total % $limit) > 0) ? 1 : 0;
        if ($totalPage <= 0) return [];
        if ($currentPage > $totalPage) $currentPage = $totalPage;
        if ($currentPage < 1) $currentPage = 1;

        $prev_page_url = null;
        $next_page_url = null;
        $first_page_url = URL::current() . '?page=1';
        $last_page_url = URL::current() . '?page=' . $totalPage;
        if ($currentPage > 1) {
            $prev_page_url = URL::current() . '?page=' . ($currentPage - 1);
        }
        if (($currentPage + 1) <= $totalPage) {
            $next_page_url = URL::current() . '?page=' . ($currentPage + 1);
        }

        $offset = ($currentPage - 1) * $limit;
        $queryOption = ($offset > 1000) ? " option max_matches=2000" : "";
        $data = $query->orderByRaw("id asc LIMIT " . $offset . ", " . $limit . $queryOption)->get();

        return [
            'links' => [
                'first' => $first_page_url,
                'last'  => $last_page_url,
                'next'  => $next_page_url,
                'prev'  => $prev_page_url,
            ],
            'meta'  => [
                'current_page' => $currentPage,
                'from'         => $offset + 1,
                'last_page'    => $totalPage,
                'path'         => URL::current(),
                'per_page'     => $limit,
                'to'           => $offset + $limit,
                'total'        => $total,
            ],
            'data'  => $data->toArray(),
        ];
    }
}
