<?php

namespace App\Http\Middleware;

use App\Services\PreviewTemplateUpdater;
use Closure;
use Illuminate\Http\Request;
use Symfony\Component\HttpFoundation\Response;
use App\Helpers\SiteCache;
use App\Services\TemplateUpdater;
use App\Services\LiquidRenderer;
/**
 * Class LoadDistData 用中间件来获取distm网店信息
 */
class LoadDistData
{
    /**
     * Handle an incoming request.
     *
     * @param
     */
    public function handle(Request $request, Closure $next): Response
    {


        // 获取请求的域名
        $domain = getHost();
        //$domain = 'internal-demo-site.mietubl.com.cn';

        // 从缓存中获取站点配置并反序列化
        $dist = SiteCache::getDist($domain);
        $dist = $dist ? unserialize($dist) : null;

        // 如果找不到匹配的数据,直接返回404响应
        if (!$dist) {
            abort(404, 'site not found.');
        }

        // 检查模板是否需要更新
        if(!empty($dist?->publishList?->template_update_code)) {

            if (
                !$dist?->publishList?->template_local_code ||
                $dist?->publishList?->template_update_code !== $dist?->publishList?->template_local_code
            ) {


                // dd('update template');
                // 更新模板
                TemplateUpdater::updateTemplates($dist);

                // 清除缓存并重新获取
                SiteCache::clearDistCache($domain);
                $dist = SiteCache::getDist($domain);
                $dist = $dist ? unserialize($dist) : null;

                if (!$dist) {
                    abort(404, 'site not found.');
                }

            }
        }


        //补充domain
        $dist->domain=$domain;

        // 全局共享  数据
        app()->instance('dist', $dist);
        // 将找到的 dist 数据添加到请求中,方便后续使用
        //$request->attributes->set('dist', $dist);

        $menus_header=SiteCache::getMenu($domain,0,$dist->id);
        $menus_footer=SiteCache::getMenu($domain,1,$dist->id);

        app()->instance('menus_header', $menus_header);// 头部菜单
        app()->instance('menus_footer', $menus_footer);// 底部菜单

        $currentUrl = url()->current();
        $secureUrl = preg_replace('/^http:/i', 'https:', $currentUrl);
        app()->instance('current_url', $secureUrl);// 当前页面


        // 预览模式
        $preview = $request->get('mtb-preview');
        if ($preview) {
            $update = PreviewTemplateUpdater::updateTemplates($dist);
            if ($update) {
                die($update);
            }
        }
        // 预览模式结束

        return $next($request);
    }
}