#!/usr/bin/env python3

import os
import sys
import gi
from gi.repository import GLib

# Check Playerctl version
gi.require_version("Playerctl", "2.0")
from gi.repository import Playerctl


def player_status_str(status):
    if status == Playerctl.PlaybackStatus.PLAYING:
        return "Playing"
    elif status == Playerctl.PlaybackStatus.PAUSED:
        return "Paused"
    elif status == Playerctl.PlaybackStatus.STOPPED:
        return "Stopped"
    else:
        return "Unknown"


def now_playing_str(artist, title):
    if artist == None and title == None:
        return "No music information"
    elif artist == None:
        return title
    else:
        return f"{artist} - {title}"


players = Playerctl.list_players()

if len(players) == 0:
    print("No players found")
    exit(0)

homedir = os.environ["HOME"]
player_file = f"{homedir}/.playerctl_player"
current_player_name = ""

if os.path.isfile(player_file):
    with open(player_file, mode="r") as file:
        current_player_name = file.read()

player_found = False
player_changed = False
player_index = 0
for index, p in enumerate(players):
    if p.instance == current_player_name:
        player_found = True
        player_index = index
        break

if not player_found:
    player = Playerctl.Player.new_from_name(players[0])
else:
    player = Playerctl.Player.new_from_name(players[player_index])

if len(sys.argv) == 1:
    out = f'ﱘ [{player.get_property("player-name")}] '
    if player.props.playback_status == Playerctl.PlaybackStatus.PLAYING:
        out += now_playing_str(player.get_artist(), player.get_title())
    else:
        out += player_status_str(player.get_property("playback_status"))

    print(out)
elif sys.argv[1] == "next-player":
    player_changed = True
    player_index += 1
    if player_index == len(players):
        player_index = 0

    player = Playerctl.Player.new_from_name(players[player_index])
elif sys.argv[1] == "play-pause":
    player.play_pause()
elif sys.argv[1] == "next":
    player.next()
elif sys.argv[1] == "previous":
    player.previous()

if player_changed or not player_found:
    with open(player_file, mode="w") as file:
        file.write(player.get_property("player-instance"))
        file.flush()