<?php

namespace App\Http\Controllers;

use App\Models\DistAppearanceTemplate;
use Illuminate\Http\Request;
use App\Services\LiquidRenderer;
use App\Models\SitePage;
class PageController extends Controller
{

    protected $liquidRenderer;

    public function __construct(LiquidRenderer $liquidRenderer)
    {
        $this->liquidRenderer = $liquidRenderer;
    }

    /**
     * Display a listing of the pages.
     *
     * @return \Illuminate\Http\Response
     */
    public function list()
    {
        abort('404');
        $cacheKey = "page_list_dist_" . getDistId() . "_page_" . request()->get('page', 1);
        $pages = SitePage::paginate(10)->where('dist_id', getDistId())->where('status', '1'); // 每页显示10个页面
        return $this->liquidRenderer->render('pages_list', ['pages' => $pages],$cacheKey);
    }

    /**
     * Display the specified page.
     *
     * @param  string  $slug
     * @return \Illuminate\Http\Response
     */
    public function detail($slug)
    {

        $recent_pages=null;

        $page = SitePage::where('status', '1')->where('dist_id', getDistId())->where('slug', $slug)->orWhere('id', $slug)->first();


        // 如果没有找到且是数字,通过 id 获取页面
        if (!$page) {
            if (is_numeric($slug))
            {
                $page = SitePage::where('status', '1')->where('dist_id', getDistId())->where('id', $slug)->firstOrFail();
            }
            else{
                abort(403);
            }
        }

        if($page->page_type==0) {
            $previousPage = SitePage::where('dist_id', getDistId())
                ->where('status', '1')
                ->where('id', '<', $page->id)
                ->where('page_type',0)
                ->orderBy('id', 'desc')
                ->first();

            $nextPage = SitePage::where('dist_id', getDistId())
                ->where('status', '1')
                ->where('id', '>', $page->id)
                ->where('page_type',0)
                ->orderBy('id', 'asc')
                ->first();

            // 创建分页数据结构
            $paginator = [
                'previous_page' => $previousPage ? true : false, // 是否有上一页
                'previous_page_url' => $previousPage ? "/pages/" . ($previousPage->slug ?: $previousPage->id) : null, // 上一页的 URL
                'previous_page_title' => $previousPage ? $previousPage->title : null, // 上一页的标题
                'next_page' => $nextPage ? true : false, // 是否有下一页
                'next_page_url' => $nextPage ? "/pages/" . ($nextPage->slug ?: $nextPage->id) : null, // 下一页的 URL
                'next_page_title' => $nextPage ? $nextPage->title : null, // 下一页的标题
            ];

            //Recent post
            //获取最近的文章 数量有限制,当前文章不要放进去
            $recent_pages_limit=10;
            $recent_pages = SitePage::where('dist_id', getDistId())
                ->where('status', '1')
                ->where('id', '!=', $page->id)
                ->where('page_type',0)
                ->orderBy('id', 'desc')
                ->limit($recent_pages_limit)
                ->get();


        }
        else{
            $paginator = [];
        }



        // 构建导航数据 开始
        $breadcrumbs = [
            [
                'url' => '/',
                'name' => 'Home',
            ]
        ];

        if ($page->tags->isNotEmpty()) {
            $tag = $page->tags->first();
            $breadcrumbs[] = [
                'url' => $tag->slug ? "/collections/{$tag->slug}" : "/collections/{$tag->id}",
                'name' => $tag->name,
            ];
        }

        $breadcrumbs[] = [
            'url' => '#',
            'name' => $page->title,
        ];
        // 构建导航数据 结束

        $template_file ='pages_detail.liquid';

        if(!empty($page->template_file ))
        {
            //查找当前外观是否存在这文件,找不到就用默认的
            $dist=app('dist');
            $appearanceId = $dist->appearance->id;
            if (DistAppearanceTemplate::hasFileName($page->template_file,getDistId(),$appearanceId) == true) {
                $template_file=$page->template_file;
            }
        }

        return $this->liquidRenderer->render($template_file,
            [
                'page' => $page,
                'recent_pages' => $recent_pages,
                'breadcrumbs' => $breadcrumbs,
                'paginator' => $paginator,
                'csrf_token' => csrf_token(),

            ]);
    }
}