#!/usr/bin/env python3
"""Create a Google Drive OAuth user token for personal Drive uploads."""

from __future__ import annotations

from pathlib import Path
import sys

from google_auth_oauthlib.flow import InstalledAppFlow


CLIENT_SECRET = Path("/root/.config/hermes-google-drive/oauth-client.json")
TOKEN_FILE = Path("/root/.config/hermes-google-drive/user-token.json")
SCOPES = ["https://www.googleapis.com/auth/drive.file"]


def main() -> int:
    if not CLIENT_SECRET.exists():
        print(f"Missing OAuth client secret: {CLIENT_SECRET}", file=sys.stderr)
        print("Create a Google OAuth client of type Desktop app and save its JSON there.", file=sys.stderr)
        return 1
    flow = InstalledAppFlow.from_client_secrets_file(str(CLIENT_SECRET), SCOPES)
    flow.redirect_uri = "urn:ietf:wg:oauth:2.0:oob"
    auth_url, _ = flow.authorization_url(prompt="consent", access_type="offline")
    print("Open this URL in your browser, approve access, then paste the code here:")
    print(auth_url)
    code = input("Code: ").strip()
    flow.fetch_token(code=code)
    creds = flow.credentials
    TOKEN_FILE.parent.mkdir(parents=True, exist_ok=True)
    TOKEN_FILE.write_text(creds.to_json())
    TOKEN_FILE.chmod(0o600)
    print(f"OAuth user token saved: {TOKEN_FILE}")
    return 0


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