"""Disposable subprocess signal-recovery rehearsal."""

from __future__ import annotations

import argparse
import signal
import sys
from pathlib import Path
from types import FrameType

sys.path.insert(0, str(Path(__file__).resolve().parents[1]))

from scripts.nutricoach_v150_phase_journal import PhaseJournal


def main() -> int:
    parser = argparse.ArgumentParser(description=__doc__)
    _ = parser.add_argument("--root", required=True, type=Path)
    _ = parser.add_argument("--mode", choices=("recover", "run"), required=True)
    _ = parser.parse_args()
    root = Path(sys.argv[sys.argv.index("--root") + 1])
    mode = sys.argv[sys.argv.index("--mode") + 1]
    journal = PhaseJournal(root / "phase.json")
    if mode == "recover":
        journal.advance("ROLLED_BACK")
        return 0

    def terminate(_signal: int, _frame: FrameType | None) -> None:
        journal.advance("ROLLED_BACK")
        raise SystemExit(0)

    _ = signal.signal(signal.SIGTERM, terminate)
    journal.advance("INSTALLED")
    print("READY", flush=True)
    signal.pause()
    return 0


if __name__ == "__main__":
    raise SystemExit(main())
