import AstalBattery from 'gi://AstalBattery';
import AstalBluetooth from 'gi://AstalBluetooth';
import AstalNetwork from 'gi://AstalNetwork';
import AstalWp from 'gi://AstalWp';
import Brightness from '../../../util/brightness';
import {
    Gtk
} from 'astal/gtk4';
import QuickActions from '../../QuickActions/QuickActions';
import {
    bind
} from 'astal';
import {
    execAsync
} from 'astal';
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,
    BrightnessWidget
};