import { bind } from "astal";
import { execAsync } from "astal";
import AstalBattery from "gi://AstalBattery";
import AstalBluetooth from "gi://AstalBluetooth";
import AstalNetwork from "gi://AstalNetwork";
import AstalWp from "gi://AstalWp";
import { Gtk } from "astal/gtk4";
import Brightness from "../../../util/brightness";
import QuickActions from "../../QuickActions/QuickActions";
const STATE = AstalNetwork.DeviceState;
const QuickView = () => {
    const qa = QuickActions.QuickActions();
    const showQuickActions = () => {
        qa.popup();
    };
    return (
        
    );
};
const NetworkWidget = () => {
    const network = AstalNetwork.get_default();
    return (
        
             {
                    if (state === AstalNetwork.State.CONNECTING) {
                        return "chronometer-reset-symbolic";
                    } else if (
                        state === AstalNetwork.State.CONNECTED_LOCAL ||
                        state === AstalNetwork.State.CONNECTED_SITE ||
                        state === AstalNetwork.State.CONNECTED_GLOBAL
                    ) {
                        return "network-wired-activated-symbolic";
                    } else {
                        return "paint-unknown-symbolic";
                    }
                })}
                cssClasses={["network-widget", "quick-view-symbol"]}
                visible={bind(network.wifi, "state").as(
                    state => state !== STATE.ACTIVATED,
                )}
            >
             {
                    if (state === STATE.ACTIVATED) {
                        return network.wifi.iconName;
                    } else {
                        return "";
                    }
                })}
                tooltipText={bind(network.wifi, 'ssid')}
                cssClasses={["network-widget", "quick-view-symbol"]}
                visible={bind(network.wifi, "state").as(
                    state => state === STATE.ACTIVATED,
                )}
            >
        
    );
};
const BluetoothWidget = () => {
    const bluetooth = AstalBluetooth.get_default();
    const enabled = bind(bluetooth, "isPowered");
    const connected = bind(bluetooth, "isConnected");
    // For each connected BT device, render status
    return (
        
             e)}>
                 c)}
                >
                 !c)}
                >
            
             !e)}
            >
            
                {bind(bluetooth, "devices").as(devices => {
                    return devices.map(device => {
                        return (
                             icon,
                                )}
                                visible={bind(device, "connected")}
                                tooltipText={bind(device, "batteryPercentage").as(
                                    n => {
                                        return device.get_name() + ': ' + n + "%";
                                    },
                                )}
                            >
                        );
                    });
                })}
            
        
    );
};
let hasSentNotification = false;
const BatteryWidget = () => {
    const battery = AstalBattery.get_default();
    if (battery.get_is_present()) {
        return (
             icon)}
                cssClasses={["quick-view-symbol"]}
                tooltipText={bind(battery, 'percentage').as(p => {
                    const level = Math.round(p * 100)
                    if ( level < 20 && !hasSentNotification ) {
                        hasSentNotification = true;
                        execAsync( 'bash -c "notify-send \'Battery level below 20%\'"' );
                    }
                    return `Battery Level: ${level}%`
                })}
            >
        );
    } else {
        return ;
    }
    // Else, no battery available -> Don't show the widget
};
const BrightnessWidget = () => {
    const brightness = Brightness.get_default();
    const screen_brightness = bind(brightness, "screen");
    return (
        
            
            
        
    );
};
const Audio = () => {
    const wireplumber = AstalWp.get_default();
    if (wireplumber) {
        return (
            
                 icon,
                    )}
                    cssClasses={["quick-view-symbol"]}
                    tooltipText={bind(wireplumber.defaultSpeaker, 'volume').as(v => Math.round(100 * v) + '%')}
                >
                 icon)}
                    cssClasses={["quick-view-symbol"]}
                    tooltipText={bind(wireplumber.defaultMicrophone, 'volume').as(v => Math.round(100 * v) + '%')}
                >
            
        );
    } else {
        print(
            "[ WirePlumber ] Could not connect, Audio support in bar will be missing",
        );
        return ;
    }
};
// cssClasses={[ 'quick-view-symbol' ]}
export default {
    QuickView,
};