(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}))