import { BoxWidget } from 'lib/types/widget';
import { capitalizeFirstLetter } from 'lib/utils';

const network = await Service.import('network');

const Ethernet = (): BoxWidget => {
    return Widget.Box({
        class_name: 'menu-section-container ethernet',
        vertical: true,
        children: [
            Widget.Box({
                class_name: 'menu-label-container',
                hpack: 'fill',
                child: Widget.Label({
                    class_name: 'menu-label',
                    hexpand: true,
                    hpack: 'start',
                    label: 'Ethernet',
                }),
            }),
            Widget.Box({
                class_name: 'menu-items-section',
                vertical: true,
                child: Widget.Box({
                    class_name: 'menu-content',
                    vertical: true,
                    setup: (self) => {
                        self.hook(network, () => {
                            return (self.child = Widget.Box({
                                class_name: 'network-element-item',
                                child: Widget.Box({
                                    hpack: 'start',
                                    children: [
                                        Widget.Icon({
                                            class_name: `network-icon ethernet ${network.wired.state === 'activated' ? 'active' : ''}`,
                                            tooltip_text: network.wired.internet,
                                            icon: `${network.wired['icon_name']}`,
                                        }),
                                        Widget.Box({
                                            class_name: 'connection-container',
                                            vertical: true,
                                            children: [
                                                Widget.Label({
                                                    class_name: 'active-connection',
                                                    hpack: 'start',
                                                    truncate: 'end',
                                                    wrap: true,
                                                    label: `Ethernet Connection ${network.wired.state !== 'unknown' && typeof network.wired?.speed === 'number' ? `(${network.wired?.speed / 1000} Gbps)` : ''}`,
                                                }),
                                                Widget.Label({
                                                    hpack: 'start',
                                                    class_name: 'connection-status dim',
                                                    label: capitalizeFirstLetter(network.wired.internet),
                                                }),
                                            ],
                                        }),
                                    ],
                                }),
                            }));
                        });
                    },
                }),
            }),
        ],
    });
};

export { Ethernet };
