import os
import subprocess
from libqtile import layout, bar, widget, hook
from libqtile.config import Click, Drag, Group, Match, Screen, Rule
from libqtile.command import lazy
from keys import MyKeys
from libqtile.dgroups import simple_key_binder
from colors import gruvbox, nord_fox, my_colors, dracula
#from spotify_widget import Spotify


@hook.subscribe.startup_once
def start_once():
    autostart_path = os.path.expanduser('~/.config/autostart/autostart.sh')
    subprocess.run([autostart_path])


# Keybindings
my_keys = MyKeys(mod="mod4",
                 browser="qutebrowser",
                 term="alacritty",
                 editor="emacsclient -c -a 'emacs'")

keys = my_keys.init_keys()
dgroups_key_binder = simple_key_binder("mod4")
mouse = my_keys.init_mouse()
# Groups and layouts
groups = []
group_names = ["1", "2", "3", "4", "5", "6", "7", "8", "9", "0", ]
group_labels = ["Ⅰ", "Ⅱ", "Ⅲ", "Ⅳ", "Ⅴ", "Ⅵ", "Ⅶ", "Ⅷ", "Ⅸ", "Ⅹ", ]
group_layouts = ["monadtall", "monadtall", "monadtall", "monadtall",
                 "monadtall", "monadtall", "monadtall", "monadtall",
                 "monadtall", "monadtall", ]

for i in range(len(group_names)):
    groups.append(
        Group(
            name=group_names[i],
            layout=group_layouts[i].lower(),
            label=group_labels[i],
        ))


def init_layout_theme():
    return {"margin": 5,
            "border_width": 2,
            "border_focus": dracula["cyan"],
            "border_normal": dracula["bg"],
            }


layout_theme = init_layout_theme()


layouts = [
    layout.MonadTall(**layout_theme),
    # layout.MonadWide(**layout_theme),
    # layout.Matrix(**layout_theme),
    # layout.Bsp(**layout_theme),
    layout.Floating(**layout_theme),
    # layout.RatioTile(**layout_theme),
    layout.Max(**layout_theme)
]

# Widgets


def init_widgets_defaults():
    return dict(font="Noto Sans",
                fontsize=12,
                padding=2,
                foreground=dracula["fg"],
                background=dracula["bg"]
                )


widget_defaults = init_widgets_defaults()


def init_widgets_list():
    widgets_list = [
        widget.Spacer(
            length=7,
        ),
        widget.Image(
            filename="~/.config/qtile/rms.png",
            scale="True",
            margin=2,
        ),
        widget.Spacer(
            length=7,
        ),
        widget.GroupBox(
            font="FontAwesome",
            fontsize=20,
            padding=3,
            margin=4,
            borderwidth=1,
            active=dracula["cyan"],
            inactive=dracula["curr"],
            rounded=False,
            highlight_method="line",
            this_current_screen_border=dracula["red"],
            other_current_screen_border=dracula["curr"],
        ),
        widget.CurrentLayout(
            font="Noto Sans Bold",
            foreground=dracula["fg"],
            background="#5B4B8A",
        ),
        widget.Spacer(
            length=5
        ),
        widget.WindowName(
            font="JetBrains Mono Bold",
            fontsize=12,
            foreground=dracula["green"],
            background=dracula["bg"],
        ),
        # widget.Image(
        #     filename = "~/.config/qtile/spotify2.png",
        #     scale = True,
        # ),
        # Spotify(
        #     fontsize = 12,
        #     background = dracula["bg"],
        #     color = dracula["green"],
        #     fmt = '{}',
        #     font = "JetBrains Mono Bold"
        # ),
        # widget.Moc(
        #     font = "JetBrains Mono",
        #     fontsize= 13,
        #     play_color=dracula["green"],
        #     paddig = 10,
        # ),
        widget.Pomodoro(
            color_active=dracula["cyan"],
            color_break=dracula["orange"],
            color_inactive=dracula["curr"],
            lenghth_pomodori=30,
            fontsize=17,
        ),
        widget.Spacer(
            length=10,
        ),
        widget.Image(
            filename="~/.config/qtile/volume1.png",
            scale=True,
        ),
        widget.Spacer(
            length=7,
            padding=10,
        ),
        widget.Volume(
            fontsize=15,
            fmt='{} ',
            background=dracula["bg"],
            foreground=dracula['orange'],
            font="JetBrains Mono",
            margin=10,
        ),
        # widget.Mpris2(
        #     fontsize= 16,
        #     background = my_colors["red"],
        #     objname="org.mpris.MediaPlayer2.spotify"
        # ),
        widget.Spacer(
            length=7,
            padding=10,
        ),
        widget.Image(
            filename="~/.config/qtile/ram2.png",
            scale=True,
        ),
        widget.Memory(
            measure_mem="G",
            fontsize=15,
            foreground=dracula["cyan"],
            background=dracula["bg"],
            font='JetBrains Mono Bold',
        ),
        widget.MemoryGraph(
            type='box',
            graph_color=dracula["cyan"],
            foreground=dracula["fg"],
            background=dracula["bg"],
        ),
        widget.Spacer(
            length=7
        ),
        widget.Image(
            filename="~/.config/qtile/cpu1.png",
            scale=True,
        ),
        widget.ThermalSensor(
            threshold=50,
            fontsize=15,
            font='JetBrains Mono Bold',
            foreground=dracula["cyan"],
            background=dracula["bg"],
        ),
        widget.CPUGraph(
            type='box',
            graph_color=dracula["cyan"],
            background=dracula["bg"],
        ),
        widget.Spacer(
            length=5
        ),
        widget.TextBox(
            font="FontAwesome",
            text="  ",
            foreground=dracula["orange"],
            background=dracula["bg"],
            padding=2,
            fontsize=18
        ),
        widget.Clock(
            font='JetBrains Mono Bold',
            foreground=dracula["cyan"],
            background=dracula["bg"],
            fontsize=18,
            format="%d-%m-%Y | %H:%M"
        ),
        widget.Spacer(
            length=6
        ),
        widget.Systray(
            background=dracula["bg"],
            icon_size=20,
            padding=10,
            margin=10,
        ),
        widget.Spacer(
            length=5
        ),
    ]
    return widgets_list


widgets_list = init_widgets_list()


def init_widgets_screen1():
    widgets_screen1 = init_widgets_list()
    return widgets_screen1


def init_widgets_screen2():
    widgets_screen2 = init_widgets_list()
    return widgets_screen2[:-2]


widgets_screen1 = init_widgets_screen1()
widgets_screen2 = init_widgets_screen2()


def init_screens():
    return [Screen(top=bar.Bar(widgets=init_widgets_screen1(), size=33, margin=11),),
            Screen(top=bar.Bar(widgets=init_widgets_screen2(), size=28, margin=7))]


screens = init_screens()

follow_mouse_focus = True
bring_front_click = False
cursor_warp = True
auto_fullscreen = True

focus_on_window_activation = "smart"  # or smart


wmname = "Qtile-Apo11o"