<?php

namespace App\Http\Controllers;

use App\Models\DistAppearanceTemplate;
use App\Models\DistProduct;
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,
        ];
        // 构建导航数据 结束


        //能过 seo_keywords 查找相有相同 seo_keywords的产品, seo_keywords 可能是多个,用逗号分隔
        $seo_keywords = $page->seo_keywords;

        $seo_keywords_array = explode(',', $seo_keywords);

        if(!empty($seo_keywords_array))
        {
            $seo_keywords_array = array_map('trim', $seo_keywords_array);
            $seo_keywords_array = array_unique($seo_keywords_array);

            // 构建查询条件
            $query = DistProduct::where('dist_id', getDistId())
                ->where('enabled', 1)
                ->where('status', 2);

            // 为每个关键词添加查询条件
            $query->where(function($q) use ($seo_keywords_array) {
                foreach ($seo_keywords_array as $keyword) {
                    $q->orWhere(function($subQ) use ($keyword) {
                        $subQ->where('seo_keywords', 'LIKE', $keyword)
                            ->orWhere('seo_keywords', 'LIKE', $keyword . ',%')
                            ->orWhere('seo_keywords', 'LIKE', '%,' . $keyword)
                            ->orWhere('seo_keywords', 'LIKE', '%,' . $keyword . ',%');
                    });
                }
            });

            // 获取相关产品
            $relatedProducts = $query->with('images')
                ->orderBy('order', 'desc')
                ->orderBy('id', 'desc')
                ->limit(4)
                ->get();

        }




        $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(),
                'relatedProducts' => $relatedProducts,

            ]);
    }
}