# -*- coding: utf-8 -*-
"""01 입수 → 02 분석 → 03 결과 노트북을 순서대로 실행하고 실행 기록을 남긴다.

사용법:  python run_all.py
결과   :  각 노트북이 실행 결과를 담은 채 저장되고, output/run_log.txt 에 시각·환경·소요시간이 기록된다.
"""
import os
import platform
import sys
import time

import nbformat
from nbclient import NotebookClient

HERE = os.path.dirname(os.path.abspath(__file__))
ORDER = ["01_입수.ipynb", "02_분석.ipynb", "03_결과.ipynb"]


def main() -> int:
    log = [f"실행 시각: {time.strftime('%Y-%m-%d %H:%M:%S')}", f"Python {platform.python_version()} ({sys.platform})"]
    for name in ORDER:
        path = os.path.join(HERE, name)
        nb = nbformat.read(path, as_version=4)
        t0 = time.time()
        NotebookClient(nb, timeout=600, kernel_name="python3", resources={"metadata": {"path": HERE}}).execute()
        nbformat.write(nb, path)
        msg = f"{name}: 완료 ({time.time() - t0:.1f}초)"
        print(msg)
        log.append(msg)
    os.makedirs(os.path.join(HERE, "output"), exist_ok=True)
    with open(os.path.join(HERE, "output", "run_log.txt"), "w", encoding="utf-8") as f:
        f.write("\n".join(log) + "\n")
    return 0


if __name__ == "__main__":
    sys.exit(main())
