;;Input values


(defvar image '["kitty.svg","firefox.svg","sublime.svg","kitty.svg","","","","","","webcord.svg"]')

(deflisten brightnessValue
    :initial "0"
    `scripts/brightness.sh`)

(defpoll network
    :initial '{"name":"No Connection","image":"n.A."}'
    :interval "2s"
    `scripts/network.sh &`)

(deflisten workspaces
    :initial ''
    `scripts/clients/build/clients`)



(defpoll bluetooth
    :initial '{"name":"","battery":"0"}'
    :interval "2s"
    `scripts/bluetooth.sh`)

(deflisten volume
    :initial '{"volume":"0","muted":"0"}'
    `scripts/volume.sh`)

(defpoll media
    :initial '{"status":"","name":""}'
    :interval "2s"
    `scripts/media.sh`)


;; Widget templates

(defwidget imageDPI [image size visible]
    (overlay
        :width "${size}"
        :height "${size}"
        :visible "${visible}"
        (box
            :width "${size}"
            :height "${size}")
        (transform
            :scale-x "50%"
            :scale-y "50%"
            :halign "center"
            :valign "center"
            :translate-x "${size}"
            :translate-y "${size}"
            (image
                :path "${image}"
                :image-width "${size * 2}"
                :image-height "${size * 2}"))))


(defwidget icon [widgetclass ?hover percentage image]
    (box
    :class "${widgetclass}"
    :space-evenly false
        (overlay
            :tooltip "${hover}"
            (circular-progress
                :width 18
                :value "${percentage}"
                :start-at 75
                :thickness 2
                :clockwise false)
            (transform
                :scale-x "50%"
                :scale-y "50%"
                :halign "center"
                :valign "center"
                :translate-x "16"
                :translate-y "16"
                (image
                    :path "${image}"
                    :image-width "32"
                    :image-height "32")))))


;; Widgets


(defwidget workspaces []
    (box
        (for workspace in workspaces
            (eventbox
                :onclick `/home/willifan/.config/scripts/workspaces.sh ${workspace.num}`
                (label
                    :width "15"
                    :class {workspace.active == 1 ? "activeWorkspace" : workspace.occupied == 0 ? "unoccupiedWorkspace" : ""}
                    ;;:visible {workspace.occupied == 1 ? "true" : "false"}
                    :text "${workspace.num}")))))

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

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

(defwidget smallSpacer []
    (box
        :width 2))

(defwidget space []
    (box
        :width 5))

(defwidget seperator []
    (box
        (label
            :text "|"
            )))


;; Widget blocks

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

(defwidget processing []
    (eventbox
        :onclick 'hyprctl dispatch exec "[float; pin; size 40% 40%; move 100%-41% 40] kitty bpytop -b proc"'
        :class "smallBox"
        (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"
        (box
            :space-evenly false
            :halign "end"
            :valign "center"
            :height 20
            (smallSpacer)
            (audio)
            (space)
            (brightness)
            (smallSpacer))))

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

(defwidget energy []
    (eventbox
        :onclick `sleep 1 && systemctl hibernate`
        :class "smallBox"
        (box
            :space-evenly false
            :halign "end"
            :valign "center"
            :height 20
            (smallSpacer)
            (battery)
            (space)
            (power)
            (smallSpacer))))


(defwidget start []
    (box
        :orientation "h"
        :space-evenly false
        :halign "start"
        (space)
        (workspaces)))

(defwidget center [monitor]
    (box
        :orientation "h"
        :space-evenly false
        :halign "center"
        (workspaces
            :monitor "${monitor}")
))

(defwidget end []
    (box
        :spacing 2
        :orientation "h"
        :space-evenly false
        :valign "center"
        :halign "end"

        (processing)

        (seperator)
        
        (controlls)

        (seperator)

        (wireless)

        (seperator)

        (energy)

        (space)))




;; Window definition


(include "newbar.yuck")