<?php

use xmvc\core\cmd\MetaDataClass;

$metaConfDir = ROOT . '/metaConf';
$op = I('op', '');
$dir = I('dir', '');
$html = '';
switch ($op) {
    case '':
    case 'dir':
        forEachDir($metaConfDir . '/ddl', function (string $path, string $basename, string $type, int $leve) use (&$html) {
            if ($type == 'dir') {
                $html .= "<a href='" . url('SELF-METHOD', ['op' => 'files', 'dir' => $basename]) . "'>{$basename}</a><br>\n";
            }
        }, false);
        break;
    case 'files':
        $path = $metaConfDir . '/ddl/' . $dir;
        $url = url('SELF');
        $csrfToken = getCsrfToken();
        $html = [];
        $html[] = "<h1>{$path}</h1>";
        $html[] = "<form action='{$url}' method='post'>";
        $html[] = "<input type='hidden' name='csrfToken' value='{$csrfToken}'>";
        $html[] = '<div style="padding-left:1em"><input type="submit" value="生成元数据"></div>';
        $html[] = '<div style="padding-left:1em"><input type="checkbox" id="checkall"> 全选</div>';
        $html[] = "<ul class='ul-tables'>";
        $findFiles = glob($path . '/*.sql');
        $selectFiles = I('files', []);
        foreach ($findFiles as $i => $filename) {
            $baseName = basename($filename);
            $checked = '';
            if (in_array($baseName, $selectFiles)) {
                $checked = " checked='true'";
                $dbname = $dir;
                $sort = 1;

                $ddl = file_get_contents($filename);
                $metadata = new MetaDataClass();
                $jsonObj = null;
                $parttern = '/(\{.*\})/';
                if (preg_match_all($parttern, $ddl, $m)) {
                    $jsonObj = $metadata->parseCommentJson(end($m[1]));
                    if ($jsonObj) {
                        $jsonObj->foreigns = $jsonObj->foreigns ?? [];
                    }
                }
                $extTableDDL = $metadata->extTableDDL($ddl, $jsonObj);

                $ddlObj = $metadata->parseDDL($extTableDDL);
                if ($ddlObj) {
                    if ($metadata->hasOptionValue($ddlObj->options->options, 'TABLE')) {
                        $metadata->createMetadataForTable($sort, $dbname, $ddlObj, $ddl);
                    } elseif ($metadata->hasOptionValue($ddlObj->options->options, 'VIEW')) {
                        $metadata->createMetadataForView($sort, $dbname, $ddlObj, $ddl);
                    }
                }
            }
            $html[] = "<li><input type='checkbox' value='{$baseName}' name='files[]' class='checkbox-file' id='ck{$i}'{$checked}><label for='ck{$i}'>{$baseName}</label></li>";
        }
        $html[] = "</ul>";
        $html[] = "</form>";
        $html = implode("\n", $html);
}
?>

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

<head>
    <meta charSet="utf-8" />
    <title>元数据</title>
    <style>
        html,
        body {
            font-size: 14px;
            font-family: "Microsoft YaHei", monaco, Consolas, Menlo, Courier, monospace;
        }

        input[type="checkbox"] {
            transform: scale(1.5);
            margin: 5px;
        }

        a {
            color: #267FB3;
            text-decoration: none;
        }

        a:hover {
            color: #AE538D;
        }


        .ul-tables {
            font-size: 1.3rem;
        }

        .ul-tables li {
            margin: 5px 0;
            list-style-type: none;
        }

        .dbname {
            font-size: .9rem;
            color: #080
        }
    </style>
    <script>
        document.addEventListener('DOMContentLoaded', (event) => {
            document.getElementById('checkall').addEventListener('click', function() {
                let that = this;
                let checkboxs = document.querySelectorAll('input[type="checkbox"]');
                checkboxs.forEach(function(item) {
                    if (item != that) {
                        item.checked = that.checked;
                    }
                });
            });
        });
    </script>
</head>

<body>
    <?= $html ?>
</body>

</html>