<?php

// app/Libraries/CommonHelper.php
namespace App\Libraries;

use Dcat\Admin\Admin;

class CommonHelper
{

    /*
     * $images 格式:['image.jpg','image2.jpg']
     * $ossSource 1:本地 2:相册
     * 返回显示的HTML显示图片
     */
    public static function displayImage($images,$boxSize=60,$imgSize=1024,$ossSource=1)
    {
        if (empty($images) || empty($images[0])) {
            $html = "";
        } else {


            // 默认显示 100x100 的图片
            $thumbnailImages = array_map(function ($imageUrl) use ($boxSize,$ossSource) {
                if ($ossSource == 1) {
                    $imageUrl= CommonHelper::ossUrl($imageUrl);
                } else {
                    $imageUrl= CommonHelper::albumUrl($imageUrl);
                }
                $extension = pathinfo($imageUrl, PATHINFO_EXTENSION);
                if ($extension == 'svg') {
                    return $imageUrl;
                } else {
                    return $imageUrl . "?x-oss-process=image/resize,m_pad,h_{$boxSize},w_{$boxSize},color_ffffff";
                }

            }, $images);

            // 生成点击查看大图的链接
            $largeImages = array_map(function ($imageUrl) use ($imgSize,$ossSource) {
                if ($ossSource == 1) {
                    $imageUrl= CommonHelper::ossUrl($imageUrl);
                } else {
                    $imageUrl= CommonHelper::albumUrl($imageUrl);
                }
                $extension = pathinfo($imageUrl, PATHINFO_EXTENSION);
                if ($extension == 'svg') {
                    return $imageUrl;
                } else {
                    return $imageUrl . "?x-oss-process=image/resize,m_lfit,w_{$imgSize},h_{$imgSize}";
                }
            }, $images);

            // 显示缩略图,并添加点击查看大图的功能
            $html = '';
            foreach ($thumbnailImages as $index => $thumbnailUrl) {
                $largeUrl = $largeImages[$index];
                $html .= "<a href='$largeUrl' target='_blank'><img src='$thumbnailUrl' style='height:{$boxSize}px; margin-right:5px; border: 1px solid #ececf1;'></a>";
            }

            return $html;
        }
        return $html;
    }

    /*
     * 返回oss的url
     */
    public static function ossUrl($imageUrl)
    {
        if (strpos($imageUrl, 'http:') === 0 || strpos($imageUrl, 'https:') === 0) {
            return  $imageUrl;
        }

        if (env('OSS_DOMAIN')) {
            return "http://".env('OSS_DOMAIN').'/'.$imageUrl;
        }
        return "http://".env('OSS_BUCKET').'.'.env('OSS_ENDPOINT').'/'.$imageUrl;
    }

    /*
     * 图库图片URL
     */
    public static function albumUrl($imageUrl)
    {
        if (strpos($imageUrl, 'http:') === 0 || strpos($imageUrl, 'https:') === 0) {
            return  $imageUrl;
        }

        return env('ALBUM_OSS_URL').'/'.$imageUrl;
    }



    /*
     * 显示视频
     */
    public static function displayVideo($items,$videoCover,$videoSrc,$boxSize=150,$ossSource=1)
    {
        $html = '';
        if (is_array($items)) {
            foreach ($items as $item) {
                $item = (array) $item;
                $cover = $item[$videoCover];
                $src = $item[$videoSrc];
                if ($ossSource == 1) {
                    $videoUrl = CommonHelper::ossUrl($src);
                } else {
                    $videoUrl = CommonHelper::albumUrl($src);
                }
                if ($ossSource == 1) {
                    $thumbnailUrl = CommonHelper::ossUrl($cover) . "?x-oss-process=image/resize,m_pad,h_{$boxSize},w_{$boxSize},color_ffffff";
                } else {
                    $thumbnailUrl = CommonHelper::albumUrl($cover) . "?x-oss-process=image/resize,m_pad,h_{$boxSize},w_{$boxSize},color_ffffff";
                }
                $html .= '<div class="video-container"><a href="#" class="playVideo" videoUrl="'.$videoUrl.'")"><img src="'.$thumbnailUrl.'" alt="Video Thumbnail"><div class="play-button"></div></a></div>';
            }
            $html .= '<div class="video-popup" id="videoPopup"><span class="close-btn">&times;</span> <iframe src="" frameborder="0" allowfullscreen></iframe></div>';
        }
        //视频播放CSS
        Admin::style("
        .video-container {
            position: relative;
            display: inline-block;
        }
        .video-container img {
            height: 200px;
            margin-right: 5px;
            border: 1px solid #ececf1;
        }
        .play-button {
            position: absolute;
            top: 50%;
            left: 50%;
            transform: translate(-50%, -50%);
            width: 50px;
            height: 50px;
            background-color: rgba(0, 0, 0, 0.7);
            border-radius: 50%;
            cursor: pointer;
        }
        .play-button::after {
            content: '▶';
            font-size: 30px;
            color: white;
            position: absolute;
            top: 50%;
            left: 50%;
            transform: translate(-50%, -50%);
        }
        .video-popup {
            display: none;
            position: fixed;
            top: 50%;
            left: 50%;
            transform: translate(-50%, -50%);
            background-color: white;
            padding: 25px;
            box-shadow: 0 0 10px rgba(0, 0, 0, 0.5);
            z-index: 1000;
        }
        .video-popup iframe {
            width: 800px;
            height: 450px;
        }
        .close-btn {
            position: absolute;
            top: 0px;
            right: 5px;
            font-size: 24px;
            color: #000;
            cursor: pointer;
        }
        .close-btn:hover {
            color: #f00;
        }
        ");

        Admin::script("
        $('.playVideo').on('click', function(e) {
            e.preventDefault(); // 阻止默认跳转行为
            var videoUrl = $(this).attr('videoUrl'); // 获取 videoUrl 属性
            $('#videoPopup').css('display', 'block');
            $('#videoPopup iframe').attr('src', videoUrl); // 设置 iframe 的 src
        });


        // 点击关闭按钮关闭视频
        $('.close-btn').on('click', function() {
            $('#videoPopup').css('display', 'none');
            $('#videoPopup iframe').attr('src', ''); // 停止播放视频
        });
        ");
        return $html; // 当没有数组数据时
    }

    /*
     * 替换新增与编辑的url,在后边加上指定的参数 (适用于弹出框的新增与编辑)
     * $addButton = '.tree-quick-create';
     * $editButton = '.tree-quick-edit';
     * $paramsUrl = 'location=0';
     */
    public static function replaceAddEditerUrl($addButton,$editButton,$paramsUrl) {

        Admin::script(
            <<<JS
var button = $('{$addButton}');
var currentUrl = button.attr('data-url');
if (currentUrl.indexOf('?') === -1) {
    button.attr('data-url', currentUrl + '?{$paramsUrl}');
} else {
    button.attr('data-url', currentUrl + '&{$paramsUrl}');
}

$('{$editButton}').each(function() {
    var currentUrl = $(this).attr('data-url');
    if (currentUrl.indexOf('?') === -1) {
        $(this).attr('data-url', currentUrl + '?{$paramsUrl}');
    } else {
        // 如果已经有查询参数,添加 &id=123
        $(this).attr('data-url', currentUrl + '&{$paramsUrl}');
    }
});
JS
        );
    }


    public static function seoReplace($titleName = 'title',$modelName = 'pages')
    {
        if ($titleName) {
            Admin::script(
<<<JS
    $('input[name="{$titleName}"]').on('input', function() {
        // 将 title 的值赋给 seo_title
        $('input[name="seo_title"]').val($(this).val());
    });
JS
            );
        }
        //ajax 生成slug
        if ($modelName) {
            Admin::script(
<<<JS
    $('input[name="{$titleName}"]').on('blur', function() {
        //通过ajax请求修改slug
        title = $(this).val();
        $.ajax({
            url: '/dist/api/generate-slug',
            type: 'GET',
            data: {
                model:'{$modelName}',
                title: title,
            },
            success: function(response) {
                $('input[name="slug"]').val(response.slug);
            }
        });
    });
JS
            );
        }

    }


    public  static function slug_fix($slug)
    {
        if ($slug == '') {
            return '';
        } else {
            $slug = preg_replace('/\s+/', '-', $slug);
            $slug = strtolower($slug);
            return $slug;
        }
    }
}