<?php
$title = $this->title($type);
$parseDir = $this->parseDir($type);
$fix = $type == 'xmvc' ? 'xmvc_' : '';
$allMethods = require($parseDir . "/{$fix}allMethods.php");
$methodsJson = json_encode($allMethods, JSON_UNESCAPED_UNICODE);
$parseArr = require($parseFile);
define('CLASS_NAME', $parseArr['name']);
$extends = $parseArr['extends'] ? ' <span style="color:#000">继承自</span> \\' . $this->gotoClass($parseArr['extends']) : '';
$classShortName = basename(str_replace('\\', '/', $parseArr['name']));
$summaryBig = '';
if (isset($parseArr['docBlock'])) {
    $arr = explode("\n", $parseArr['docBlock']['summary']);
    $summaryBig = array_shift($arr);
    $summaryMore = '';
    foreach ($arr as $k => $str) {
        $str = trim($str, '/* ');
        if ($str) {
            // 替换 - 与 - 之间的空格
            while (preg_match('/(-)\s+(-)/', $str)) {
                $str = preg_replace('/(-)\s+(-)/', '--', $str);
            }
            $str = preg_replace_callback('/^(-+)/', function ($m) {
                return str_repeat('&nbsp;&nbsp;&nbsp;&nbsp;', strlen($m[0]));
            }, $str);
            $str = trim($str, '/* ');
            if ($summaryMore != '') {
                $summaryMore .= '<br>';
            }
            $summaryMore .= $str;
        }
    }
}
$methods = $parseArr['methods'] ?: $parseArr['functions'];

// 过滤非 public 属性
if ($parseArr['properties']) {
    foreach ($parseArr['properties'] as $k => $v) {
        if ($v['visibility'] != 'public') {
            unset($parseArr['properties'][$k]);
        }
    }
}

// 过滤非 public 方法
if ($parseArr['properties']) {
    foreach ($methods as $k => $v) {
        if ($v['visibility'] != 'public') {
            unset($methods[$k]);
        }
    }
}
// @codingStandardsIgnoreStart
?>

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charSet="utf-8" />
    <title><?= $title ?></title>
    <style>
        <?php require(__DIR__ . '/style.css'); ?>
    </style>
    <?php require(__DIR__ . '/javascript.php'); ?>
</head>

<body>
    <div class="div-main">
        <?php require(__DIR__ . '/search.tpl.php'); ?>
        <div class="div-doc">
            <h2 style="color:#657F99">
                <?= $parseArr['name'] ?>
                <span style="font-size: 1.2rem;font-weight:normal"><?= $extends ?></span>
            </h2>
            <h2><?= $summaryBig ?></h2>
            <p><?= $summaryMore ?></p>
            <?php if ($parseArr['properties']) : ?>
                <h3>属性</h3>
                <ul>
                    <?php foreach ($parseArr['properties'] as $item) :
                        if ($item['visibility'] == 'public') :
                            $item['summary'] = isset($item['docBlock']['summary']) ? $item['docBlock']['summary'] : '';
                    ?>
                            <li class="propery"><span>$<?= $item['name'] ?></span><span style="color:#333;font-size:1rem;padding-left: 10px;"><?= $item['summary'] ?></span></li>
                    <?php
                        endif;
                    endforeach;
                    ?>
                </ul>
            <?php endif; ?>
            <h3>方法 &nbsp; <a href="javascript:;" onclick="sortBy('char','asc')" class="sort">by A-Z</a> &nbsp; <a href="javascript:;" onclick="sortBy('code','asc')" class="sort">by Write</a></h3>
            <ul id="methodsUL">
                <?php foreach ($methods as $i => $item) :
                    if (!isset($item['visibility']) || $item['visibility'] == 'public') :
                        $item['summary'] = isset($item['docBlock']['summary']) ? $item['docBlock']['summary'] : '';
                        $summaryArr = $this->parseRemark($item['summary']);
                        $paramString = '<span class="param-name">' . $item['name'] . '</span> (' . $this->getParamsString($item['parameters']) . '): ';
                        $paramString .= $this->getReturnTypeString($item);
                        if ($item['isStatic']) {
                            $paramString = '<span class="param-static">static function</span> ' . $classShortName . '::' . $paramString;
                        } else {
                            $paramString = '<span class="blue">function</span> ' . $paramString;
                        }
                        $paramString = str_replace('"', "'", $paramString);
                        $tags = $this->parseTags($item, ['param', 'return']);
                        $tagString = '';
                        if ($tags) {
                            $tagString = '<li>' . implode('</li><li>', $tags) . '</li>';
                            $tagString = '<ul class="tag-param">' . $tagString . '</ul>';
                        }
                        $url = $this->itemUrl([
                            'type' => $type,
                            'name' => $item['name'],
                            'parseFile' => $parseArr['parseFile']
                        ], 'func');
                ?>
                        <li class="class-name" data-i="<?= $i ?>" data-char="<?= strtolower(substr($item['name'], 0, 1)) ?>">
                            <a href="<?= $url ?>" class="func-link tooltip">
                                <?= $item['name'] ?>
                                <span class="summary"><?= $summaryArr['title'] ?></span>
                                <div class="tooltiptext">
                                    <div class="tooltiptext-func">
                                        <?= $paramString ?>
                                        <?php if ($summaryArr['title']) echo '<br><span class="func-title">' . $summaryArr['title'] . '</span>' ?>
                                        <?php if ($summaryArr['remark']) echo '<br>' . $summaryArr['remark'] ?>
                                        <?php if ($tagString) echo '<br>' . $tagString ?>
                                    </div>
                                </div>
                            </a>
                        </li>
                <?php
                    endif;
                endforeach;
                ?>
            </ul>
            <div style="height:100px"></div>
        </div><!-- div-menu -->
    </div><!-- div-main -->
</body>

</html>