"""Explicit terminal-only local backup/verify/restore. No app/browser interaction."""
import argparse
import json
import os
import sqlite3
import zipfile
from pathlib import Path
from backend.containment import install_guard
from backend.recovery import backup,verify,restore,RecoveryError,DataBusy


def main():
    parser=argparse.ArgumentParser(description='Private recovery for up to 25 fictional local-demo businesses. Stop the app first.')
    commands=parser.add_subparsers(dest='command',required=True)
    save=commands.add_parser('backup',help='Save a stopped demo into a new local ZIP.')
    save.add_argument('--data-dir',type=Path,required=True);save.add_argument('--output',type=Path,required=True)
    for name in ('verify','restore'):
        action=commands.add_parser(name)
        action.add_argument('--archive',type=Path,required=True);action.add_argument('--sha256',required=True)
        if name=='restore':
            action.add_argument('--target',type=Path,required=True)
            action.add_argument('--confirm-fresh-target',action='store_true')
    args=parser.parse_args();os.umask(0o077);install_guard()
    try:
        if args.command=='backup':result=backup(args.data_dir,args.output)
        elif args.command=='verify':result=verify(args.archive,args.sha256)
        else:result=restore(args.archive,args.sha256,args.target,confirm_fresh=args.confirm_fresh_target)
    except (RecoveryError,DataBusy,OSError,sqlite3.Error,ValueError,TypeError,KeyError,zipfile.BadZipFile) as error:
        parser.exit(2,'Recovery stopped: '+str(error)+'\n')
    print(json.dumps(result,indent=2))


if __name__=='__main__':main()
