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


;; left





;; 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
            :class "smallBox"
            :height 20
            :valign "center"
            :spacing 1
            :space-evenly false
            (space)
            (label
                :text "${media.title} - ${media.artist}"
                :tooltip "${media.title} - ${media.artist} | ${media.album}"
                :truncate true)
            (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))))

;; Boxes

(defwidget timeBox []
    (box
        :class "barbox"
        :spacing 3
        :space-evenly false
        :halign "end"
        :valign "center"
        :height 30
        (space)
        (testtime)
        (space)))

(defwidget mediaBox []
    (box
        :class "barbox"
        :visible {media.status == "Playing" ? true : false}
        :spacing 3
        :space-evenly false
        :halign "end"
        :valign "center"
        :height 30
            (space)
            (media)
            (space)))


(defwidget start []
    (box
        :orientation "h"
        :space-evenly false
        :height  30
        :halign "start"
        :valign "center"
        :spacing 3
        (timeBox)
        (mediaBox)
        (box)))

(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
        :orientation "h"
        :space-evenly false
        :spacing 3
        :height  30
        :valign "center"
        :halign "end"
        (box
            :class "barbox"
            :space-evenly false
            :spacing 2
            (space)
            (testtime
                :timezone "US/Eastern"
                :image "../images/USTime.png")
            (seperator)
            (testtime
                :timezone "Asia/Seoul"
                :image "../images/SamGuk-by_Sang_Min.png")
            (space))
        (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}))
