"""Python 3.10+. Set EMAILVERIFIER_API_KEY, then run: python verify-email.py person@example.com"""
import json
import os
import sys
import urllib.error
import urllib.request


class NoRedirect(urllib.request.HTTPRedirectHandler):
    # Keep the project key on the documented API origin.
    def redirect_request(self, req, fp, code, msg, headers, newurl):
        return None


def main():
    api_key = os.environ.get("EMAILVERIFIER_API_KEY")
    if not api_key:
        raise ValueError("Set EMAILVERIFIER_API_KEY to your project key.")
    if len(sys.argv) != 2 or not sys.argv[1] or len(sys.argv[1]) > 254:
        raise ValueError("Pass one email address: python verify-email.py person@example.com")
    request = urllib.request.Request(
        "https://emailverifier.dev/api/v1/verify",
        data=json.dumps({"email": sys.argv[1]}).encode(),
        headers={"Content-Type": "application/json", "X-API-Key": api_key},
        method="POST",
    )
    with urllib.request.build_opener(NoRedirect).open(request, timeout=30) as response:
        result = json.load(response)
    if not isinstance(result, dict) or result.get("action") not in ("allow", "review", "block"):
        raise ValueError("The API returned an unexpected response.")
    # Preserve review and unknown results; they do not confirm or reject mailbox ownership.
    print(json.dumps(result, indent=2))


if __name__ == "__main__":
    try:
        main()
    except urllib.error.HTTPError as error:
        print(f"Verification request failed (HTTP {error.code}). Check your key, credits, or rate limit before retrying.", file=sys.stderr)
        sys.exit(1)
    except (ValueError, urllib.error.URLError, TimeoutError) as error:
        print(str(error), file=sys.stderr)
        sys.exit(1)
