(include "variables.yuck")
(include "templates.yuck")


;; left


(defwidget time []
    (eventbox
        :onclick ``
        :class "smallBox"
        :valign "center"
        :height 20
        :width 70
        (label
            :text "${formattime(EWW_TIME, "%H:%M:%S")}")))

;; center


(defwidget normalWorkspaces [monitor]
    (box
        :space-evenly false
        :spacing 3
        :valign "center"
        :height 20
        (for workspace in workspaces
            (workspace
                :activeOn {workspace.normal.activeOn}
                :occupied {workspace.normal.occupied}
                :id {workspace.normal.id}
                :cmd {workspace.normal.id}
                :icon {workspace.normal.icon}
                :monitor {monitor}))))


;; right


(defwidget cpu []
    (icon
        :widgetclass "cpu"
        :hover "${round(EWW_CPU.avg, 1)}%"
        :percentage {round(EWW_CPU.avg, 1)}
        :image "../images/cpu.png"))

(defwidget ram []
    (icon
        :widgetclass "ram"
        :hover "${round(EWW_RAM.used_mem /(1024*1024*1024), 1)} GiB | ${round(EWW_RAM.used_mem_perc, 1)}%"
        :percentage {round(EWW_RAM.used_mem_perc, 1)}
        :image "../images/ram.png"))

(defwidget audio []
    (icon
        :widgetclass {volume.muted == 1 ? "muted" : "volume"}
        :hover "${volume.volume}%"
        :percentage {volume.volume >= 0 && volume.volume <= 100 ? volume.volume : 0}
        :image {volume.muted == 1 ? "../images/volumeMuted.png" : "../images/volume.png"}))

(defwidget brightness []
    (icon
        :widgetclass "brightness"
        :hover "${brightnessValue / 960}%"
        :percentage {brightnessValue / 960}
        :image "../images/brightness.png"))

(defwidget network []
    (icon
        :widgetclass "network"
        :hover {network.name}
        :percentage "100"
        :image "../images/${network.image}.png"))

(defwidget bluetooth []
    (icon
        :widgetclass "bluetooth"
        :hover {bluetooth.name}
        :percentage {bluetooth.battery}
        :image "../images/bluetooth.png"))

(defwidget battery []
    (icon
        :widgetclass {EWW_BATTERY.BAT1.status == "Charging" ? "battery" : EWW_BATTERY.total_avg > 25 ? "battery" : "batteryLow"}
        :hover "${round(EWW_BATTERY.total_avg, 1)}%"
        :percentage {EWW_BATTERY.total_avg <= 90 ? round(EWW_BATTERY.total_avg, 1)/0.9 : 100}
        :image {EWW_BATTERY.BAT1.status == "Charging" ? "../images/charging.png" : EWW_BATTERY.total_avg > 25 ? "../images/battery.png" : "../images/batteryLow.png"}))

(defwidget power []
    (icon
        :widgetclass "power"
        :hover "placeholder"
        :percentage "0"
        :image "../images/power.png"))




;; Widget blocks

(defwidget media []
    (box
        :visible {media.status == "Playing" ? true : false}
        :spacing 3
        :space-evenly false
        :halign "end"
        :valign "center"
        :height 20
        (seperator)
        (box
            :class "smallBox"
            :height 20
            :valign "center"
            :space-evenly false
            (space)
            (label
                :text {media.name}
                :tooltip {media.name}
                :limit-width 40)
            (space))))

(defwidget processing []
    (eventbox
        :onclick 'hyprctl dispatch exec "[float; pin; size 40% 40%; move 100%-41% 40] kitty bpytop -b proc"'
        :class "smallBox"
        :halign "end"
        :valign "center"
        :height 20
        (box
            :space-evenly false
            :halign "end"
            :valign "center"
            :height 20
            (smallSpacer)
            (cpu)
            (space)
            (ram)
            (smallSpacer))))

(defwidget controlls []
    (eventbox
        :onclick 'hyprctl dispatch exec "[float; pin; size 40% 40%; move 100%-41% 40] kitty pulsemixer"'
        :class "smallBox"
        :halign "end"
        :valign "center"
        :height 20
        (box
            :space-evenly false
            :halign "end"
            :valign "center"
            :height 20
            (smallSpacer)
            (audio)
            (space)
            (brightness)
            (smallSpacer))))

(defwidget wireless []
    (eventbox
        :onclick "`networkmanager_dmenu`"
        :class "smallBox"
        :halign "end"
        :valign "center"
        :height 20
        (box
            :space-evenly false
            :halign "end"
            :valign "center"
            :height 24
            (smallSpacer)
            (network)
            (space)
            (bluetooth)
            (smallSpacer))))

(defwidget energy []
    (eventbox
        :onclick `wlogout -r 25 -c 25 -m 300 &`
        :class "smallBox"
        :valign "center"
        :height 20
        (box
            :space-evenly false
            :halign "end"
            :valign "center"
            :height 20
            (smallSpacer)
            (battery)
            (space)
            (power)
            (smallSpacer))))


(defwidget start []
    (box
	:class "barbox"
        :orientation "h"
        :space-evenly false
        :height  30
        :halign "start"
        :valign "center"
        :spacing 3
        (space)
        (time)
        (media)
        (space)))

(defwidget center [monitor]
    (box
	:class "barbox"
        :orientation "h"
        :space-evenly false
        :spacing 3
        :height  30
        :halign "center"
        :valign "center"
        (space)
        (workspace
            :activeOn {workspaces[0].special.activeOn}
            :occupied {workspaces[0].special.occupied}
            :id {workspaces[0].special.id}
            :icon {workspaces[0].special.icon}
            :monitor {monitor})
        (workspace
            :activeOn {workspaces[1].special.activeOn}
            :occupied {workspaces[1].special.occupied}
            :id {workspaces[1].special.id}
            :icon {workspaces[1].special.icon}
            :monitor {monitor})
            (seperator)
        (normalWorkspaces
            :monitor {monitor})
        (seperator)
        (workspace
            :activeOn {workspaces[2].special.activeOn}
            :occupied {workspaces[2].special.occupied}
            :id {workspaces[2].special.id}
            :icon {workspaces[2].special.icon}
            :monitor {monitor})
        (workspace
            :activeOn {workspaces[3].special.activeOn}
            :occupied {workspaces[3].special.occupied}
            :id {workspaces[3].special.id}
            :icon {workspaces[3].special.icon}
            :monitor {monitor})
        (space)))

(defwidget end []
    (box
	:class "barbox"
        :spacing 2
        :orientation "h"
        :space-evenly false
        :height  30
        :valign "center"
        :halign "end"
        (space)
;;        (systray
;;            :spacing 2
;;            :orientation "h"
;;            :space-evenly true
;;            :icon-size 16)
;;
;;        (seperator)

        (processing)

        (seperator)
        
        (controlls)

        (seperator)

        (wireless)

        (seperator)

        (energy)

        (space)))

(defwidget bar [monitor]
    (centerbox
        :orientation "h"
        (start)
        (center
            :monitor {monitor})
        (end)))


(defwindow bar [monitor width height]
    :monitor {monitor}
    :geometry (geometry
        :x "0%"
        :y "5px"
        :width "${width}px"
        :height "${height}px"
        :anchor "top center")
    :stacking "fg"
    :exclusive true
    (bar
        :monitor {monitor}))