"""掃除スクリプト v1.1 —【説明用の失敗例】（架空の障害の原因）

「承認済み依頼の古い履歴も片付ける」機能を追加したという設定だが、日付の条件が抜けており、
承認済み依頼の履歴を日付に関係なくすべて削除してしまう。
これは教材のために意図的に危険にした演習例であり、正常な保持方針でも、実際のAI出力を観測したものでもない。

rev2: 任意のデータベースを受け付ける直接実行の入口を廃止した。
drill.py（break）から run(db) として呼ばれ、drill_safety の共通検査で
「初期化済みの演習領域にある practice.db」であることを確かめてからでなければ動かない。
"""
import os
import sqlite3
import sys

import drill_safety as safety


def run(db):
    work = safety.resolve_work()
    safety.require_initialized(work)
    db = safety.check_inside(work, db, "掃除対象のデータベース", must_exist=True)
    if os.path.basename(db) != "practice.db":
        raise safety.SafetyError(f"掃除対象は演習領域の practice.db に限る: {db}")
    conn = sqlite3.connect(db)
    with conn:
        # 不備: 本来は「承認済み かつ 承認日が90日より前」の履歴だけを対象にするつもりだったが、
        #       日付条件が抜けて、承認済み依頼の履歴をすべて消してしまう。
        cur = conn.execute(
            "DELETE FROM history WHERE request_id IN (SELECT id FROM requests WHERE state = '承認済み')"
        )
    print(f"cleanup v1.1: 削除した履歴 {cur.rowcount} 件", flush=True)
    conn.close()


if __name__ == "__main__":
    print("このスクリプトは単独では実行しない。drill.py の break から実行する。", flush=True)
    sys.exit(2)
