"""从测试环境导出新增表的建表语句（只读，绝不建表/改表）。

用法：
    python dump_ddl.py t_new_biz_log t_another          # 表名可多个

连接信息来自 Nacos 的 datasource 配置（见 ../tabs/sql.md 第四节 ①），
把解析到的 url/user/password 填进下面的 DSN，或用环境变量 DB_URL/DB_USER/DB_PWD。

⛔ 本脚本只执行 SHOW CREATE TABLE / SELECT，不执行任何 DDL/DML。
⛔ 导出的 DDL 原样使用，不要手改字段类型、长度、索引、字符集。
"""
import os, re, sys

# jdbc:mysql://172.16.1.7:3306/fc_integration?useUnicode=true&...
DB_URL = os.environ.get("DB_URL", "jdbc:mysql://<host>:<port>/<db>")
DB_USER = os.environ.get("DB_USER", "<user>")
DB_PWD = os.environ.get("DB_PWD", "<password>")


def parse_jdbc(url):
    m = re.search(r"jdbc:mysql://([^:/]+):(\d+)/([^?]+)", url)
    if not m:
        sys.exit(f"只支持 MySQL jdbc url，解析失败：{url}\n"
                 f"Oracle 请改用 sqlplus + DBMS_METADATA.GET_DDL（见文件末尾注释）")
    return m.group(1), int(m.group(2)), m.group(3)


def main(tables):
    import pymysql                                   # 环境已具备
    host, port, db = parse_jdbc(DB_URL)
    conn = pymysql.connect(host=host, port=port, user=DB_USER, password=DB_PWD,
                           database=db, charset="utf8mb4")
    try:
        with conn.cursor() as cur:
            for t in tables:
                cur.execute("SELECT COUNT(*) FROM information_schema.tables "
                            "WHERE table_schema=%s AND table_name=%s", (db, t))
                if not cur.fetchone()[0]:
                    print(f"-- ⛔ 表 {t} 在测试库 {db} 中不存在：")
                    print(f"--    说明测试环境也没建过，不要自己拼 DDL，去问用户要建表语句。\n")
                    continue
                cur.execute(f"SHOW CREATE TABLE `{t}`")
                ddl = cur.fetchone()[1]
                print(f"-- 新增表 {t}（导自测试环境 {host}:{port}/{db}）")
                print(ddl.rstrip() + ";\n")
    finally:
        conn.close()


if __name__ == "__main__":
    if len(sys.argv) < 2:
        sys.exit(__doc__)
    main(sys.argv[1:])

# Oracle（本机有 sqlplus，无 python 驱动）：
#   sqlplus -S user/pwd@host:port/service <<'EOF'
#   SET LONG 200000 PAGESIZE 0 LINESIZE 32767 TRIMSPOOL ON
#   SELECT DBMS_METADATA.GET_DDL('TABLE','T_NEW_BIZ_LOG') FROM DUAL;
#   -- 索引单独取：SELECT DBMS_METADATA.GET_DDL('INDEX', index_name) ...
#   EXIT
#   EOF
# MongoDB（无 mongosh/pymongo）：集合无需建表语句，如需索引定义找用户要。
