#!/usr/bin/env python3
"""Compliancly CLI — thin wrapper around the Python SDK."""
import argparse
import json
import os
import sys

def _client():
    from compliancly import Compliancly
    return Compliancly(api_key=os.environ.get("COMPLIANCLY_API_KEY"))

def cmd_login(args):
    print("Set COMPLIANCLY_API_KEY env var. Get key at https://app.compliancly.ai/admin/api-keys")
    return 0

def cmd_scan(args):
    c = _client()
    out = c.scans.create(target=args.target, kind=args.kind)
    print(json.dumps(out, indent=2))
    return 0

def cmd_findings_list(args):
    c = _client()
    out = c.findings.list(severity=args.severity, status=args.status)
    print(json.dumps(out, indent=2))
    return 0

def cmd_policies_adopt(args):
    c = _client()
    out = c.policies.adopt(args.code)
    print(json.dumps(out, indent=2))
    return 0

def cmd_policies_render(args):
    c = _client()
    blob = c.policies.render(args.policy_id, fmt=args.fmt)
    if args.output:
        open(args.output, "wb").write(blob)
        print(f"wrote {len(blob)} bytes -> {args.output}", file=sys.stderr)
    else:
        sys.stdout.buffer.write(blob)
    return 0

def main():
    p = argparse.ArgumentParser(prog="compliancly")
    p.add_argument("--version", action="version", version="compliancly-cli 0.1.0")
    sub = p.add_subparsers(dest="cmd", required=True)
    sub.add_parser("login").set_defaults(func=cmd_login)
    s = sub.add_parser("scan"); s.add_argument("target"); s.add_argument("--kind", default="auto"); s.set_defaults(func=cmd_scan)
    fl = sub.add_parser("findings"); fls = fl.add_subparsers(dest="sub", required=True)
    fll = fls.add_parser("list"); fll.add_argument("--severity"); fll.add_argument("--status"); fll.set_defaults(func=cmd_findings_list)
    pl = sub.add_parser("policies"); pls = pl.add_subparsers(dest="sub", required=True)
    pa = pls.add_parser("adopt"); pa.add_argument("code"); pa.set_defaults(func=cmd_policies_adopt)
    pr = pls.add_parser("render"); pr.add_argument("policy_id"); pr.add_argument("--fmt", default="pdf"); pr.add_argument("-o", "--output"); pr.set_defaults(func=cmd_policies_render)
    args = p.parse_args()
    return args.func(args)

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