#! /usr/bin/env python3

import argparse
import sys
import logging
import spotipy
import subprocess
from pathlib import Path
from spotipy.oauth2 import SpotifyOAuth

SPOTIFY_CLIENT_ID = "bb39d914c6884316ac09cf0c928d975b"

logger = logging.getLogger(__name__)


def main() -> int:
    # Handle program arguments
    ap = argparse.ArgumentParser(
        prog="spotify-current-track-id",
        description="Get the currently playing track ID from Spotify",
    )
    ap.add_argument("--url", help="Print the URL of the currently playing track", action="store_true")
    ap.add_argument(
        "-v", "--verbose", help="Enable verbose logging", action="store_true"
    )
    args = ap.parse_args()

    # Configure logging
    logging.basicConfig(
        level=logging.DEBUG if args.verbose else logging.INFO,
        format="%(levelname)s:	%(message)s",
    )

    # Call `ewp-secrets` to read the Spotify client secret
    secrets_proc = subprocess.run(
        [
            (Path(__file__).parent / "ewp-secrets").as_posix(),
            "load",
            "-n",
            "spotify",
            "-k",
            "client-secret",
        ],
        capture_output=True,
    )

    # If the secret manager failed, exit
    if secrets_proc.returncode != 0:
        print("Failed to load Spotify Client Secret", file=sys.stderr)
        print(
            "Please run `ewp-secrets store -n spotify -k client-secret` and pass it the secret from:",
            file=sys.stderr,
        )
        print(
            f"https://developer.spotify.com/dashboard/{SPOTIFY_CLIENT_ID}/settings",
            file=sys.stderr,
        )
        return 1

    # Connect to Spotify
    cache_path = Path("~/.cache/spotipy/spotify-current-track-id.oauth").expanduser()
    cache_path.parent.mkdir(parents=True, exist_ok=True)
    oauth = SpotifyOAuth(
        client_id=SPOTIFY_CLIENT_ID,
        client_secret=secrets_proc.stdout.decode().strip(),
        redirect_uri="http://localhost:8933",
        scope="user-read-currently-playing",
        cache_path=cache_path.as_posix(),
        open_browser=True
    )
    spotify = spotipy.Spotify(auth_manager=oauth)

    # Read the currently playing track
    current_track = spotify.current_user_playing_track()
    
    # If nothing is playing
    if not current_track:
        print("Nothing is currently playing", file=sys.stderr)
        return 1
    
    # Display info
    if args.url:
        print(current_track["item"]["external_urls"]["spotify"])
    else:
        print(current_track["item"]["id"])
        
    return 0


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