#!/usr/bin/env python3
# -*- coding: utf-8 -*-

from __future__ import annotations

import argparse
import json
import sys
from pathlib import Path

from sql_guard import validate_sql


def read_sql(args: argparse.Namespace) -> str:
    if args.file:
        return Path(args.file).read_text(encoding="utf-8")
    if args.sql:
        return " ".join(args.sql)
    if not sys.stdin.isatty():
        return sys.stdin.read()
    raise SystemExit("Provide SQL as arguments, --file, or stdin")


def main() -> int:
    parser = argparse.ArgumentParser(description="Validate Spark SQL against a safe allowlist.")
    parser.add_argument("sql", nargs="*", help="SQL string; omitted when using --file or stdin")
    parser.add_argument("--file", help="Read SQL from a UTF-8 file")
    parser.add_argument("--json", action="store_true", help="Emit machine-readable JSON")
    parser.add_argument("--allow-overwrite", action="store_true", help="Allow INSERT OVERWRITE ... SELECT")
    args = parser.parse_args()

    result = validate_sql(read_sql(args), allow_overwrite=args.allow_overwrite)
    if args.json:
        print(json.dumps(result.as_dict(), ensure_ascii=False))
    elif result.status == "PASS":
        print(f"PASS - first_keyword={result.first_keyword}")
    else:
        print(f"FAIL - first_keyword={result.first_keyword} reason={result.reason}")
    return 0 if result.status == "PASS" else 1


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