<?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']);
$abstract = $parseArr['abstract'] ? '抽象类 abstract' : '';
$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 .= htmlspecialchars($str);
        }
    }
}
$methods = $parseArr['methods'] ?: $parseArr['functions'];

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

// 过滤 private 方法
if ($parseArr['properties']) {
    foreach ($methods as $k => $v) {
        if ($v['visibility'] == 'private') {
            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">
                <span style="font-size: 1.2rem;font-weight:normal;color:blue"><?= $abstract ?></span>
                <?= $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) :
                        $item['summary'] = isset($item['docBlock']['summary']) ? $item['docBlock']['summary'] : '';
                    ?>
                        <li class="propery" title="<?= $item['visibility'] ?> $<?= $item['name'] ?>">
                            <?php
                            if ($item['isBuiltin']) {
                                echo '<span class="param-type">' . $item['type'] . '</span> ';
                            } else {
                                echo '<span class="param-type-not-builtin">' . $item['type'] . '</span> ';
                            }
                            ?>
                            <span class="visi-<?= $item['visibility'] ?>">$<?= $item['name'] ?></span>
                            <span style="color:#333;font-size:1rem;padding-left: 10px;"><?= $item['summary'] ?></span>
                        </li>
                    <?php
                    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) :
                    $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">' . $item['visibility']  . ' static function</span> ' . $classShortName . '::' . $paramString;
                    } else {
                        $paramString = '<span class="blue">' . $item['visibility']  . ' function</span> ' . $paramString;
                    }
                    if ($item['abstract']) {
                        $abstractFunc = '(抽象方法)';
                        $paramString = '<span class="blue">abstract</span> ' .  $paramString;
                    } else {
                        $abstractFunc = '';
                    }
                    $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">
                            <span class="visi-<?= $item['visibility'] ?>"><?= $item['name'] ?></span>
                            <span class="summary"><?= $summaryArr['title'] ?></span>
                            <span style="font-size: 1rem;color:blue"><?= $abstractFunc ?></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
                endforeach;
                ?>
            </ul>
            <div style="height:100px"></div>
        </div><!-- div-menu -->
    </div><!-- div-main -->
</body>

</html>