#!/usr/bin/env python3
"""Prepare an optional private advisory interpreter without changing host Python."""
import argparse
import json
import sys

from pixel_provider.advice_runtime import prepare_runtime,runtime_status
from pixel_provider.store import StoreError


def main():
    parser = argparse.ArgumentParser(description=__doc__)
    parser.add_argument('action',choices=('status','prepare'))
    parser.add_argument('--provider-directory',required=True,help='Existing owner-private pixel-providers directory')
    parser.add_argument('--python',help='Explicit installed Python 3.11+ absolute path; no global upgrade')
    parser.add_argument('--expected-revision',type=int,help='Runtime revision from status, not provider Settings revision')
    parser.add_argument('--confirm-install',action='store_true',help='Allow private venv creation and dependency download from PyPI')
    args = parser.parse_args()
    if args.action == 'prepare' and (not args.python or args.expected_revision is None):
        parser.error('prepare requires --python and --expected-revision')
    if args.action == 'status' and (args.python or args.expected_revision is not None or args.confirm_install):
        parser.error('installation options apply only to prepare')
    try:
        result = runtime_status(args.provider_directory) if args.action == 'status' else prepare_runtime(
            args.provider_directory,python=args.python,expected_revision=args.expected_revision,confirmed=args.confirm_install)
        print(json.dumps(result))
        return 0
    except StoreError as error:
        print(json.dumps(dict(error=error.code)),file=sys.stderr)
    except (OSError,ValueError,TypeError,KeyError):
        print(json.dumps(dict(error='advice-runtime-unavailable')),file=sys.stderr)
    return 1


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