/**********************************************************************
 * LeechCraft - modular cross-platform feature rich internet client.
 * Copyright (C) 2012       Eugene Mamin
 * Copyright (C) 2006-2014  Georg Rudoy
 *
 * Distributed under the Boost Software License, Version 1.0.
 * (See accompanying file LICENSE or copy at https://www.boost.org/LICENSE_1_0.txt)
 **********************************************************************/

#include "windows.h"
#include <QtGlobal>
#include <QTimer>
#include "../winapi/fakeqwidgetwinapi.h"

namespace
{
	auto aHPowerNotifyDeleter = [] (HPOWERNOTIFY *ptr)
	{
		if (ptr && *ptr)
		{
			UnregisterPowerSettingNotification (*ptr);
			delete ptr;
		}
	};
}

namespace LC::Liznoo::Events
{
	Windows::Windows (const Windows::FakeQWidgetWinAPI_ptr& widget, QObject* parent)
	: Platform (parent)
	, HPowerSchemeNotify_ (new HPOWERNOTIFY, aHPowerNotifyDeleter)
	, HPowerSourceNotify_ (new HPOWERNOTIFY, aHPowerNotifyDeleter)
	, HBatteryPowerNotify_ (new HPOWERNOTIFY, aHPowerNotifyDeleter)
	, FakeWidget_ (widget)
	{
		HWND h_wnd = reinterpret_cast<HWND> (FakeWidget_->winId ());

		*HPowerSchemeNotify_ = RegisterPowerSettingNotification (h_wnd,
			&GUID_POWERSCHEME_PERSONALITY, DEVICE_NOTIFY_WINDOW_HANDLE);

		Q_ASSERT (*HPowerSchemeNotify_);

		*HPowerSourceNotify_ = RegisterPowerSettingNotification (h_wnd,
			&GUID_ACDC_POWER_SOURCE, DEVICE_NOTIFY_WINDOW_HANDLE);

		Q_ASSERT (*HPowerSourceNotify_);

		*HBatteryPowerNotify_ = RegisterPowerSettingNotification (h_wnd,
			&GUID_BATTERY_PERCENTAGE_REMAINING,	DEVICE_NOTIFY_WINDOW_HANDLE);

		Q_ASSERT (*HBatteryPowerNotify_);

		connect (FakeWidget_.get (),
				SIGNAL (schemeChanged (QString)),
				this,
				SLOT (handleSchemeChanged (QString)));
		connect (FakeWidget_.get (),
				SIGNAL (powerSourceChanged (QString)),
				this,
				SLOT (handlePowerSourceChanged (QString)));

		IsAvailable_ = true;
	}

	void Windows::handleSchemeChanged (QString schemeName)
	{
		qDebug() << "New power scheme detected" << ": [" << schemeName << "]";
	}

	void Windows::handlePowerSourceChanged (QString powerSource)
	{
		qDebug() << "New power source detected" << ": [" << powerSource << "]";
	}
}
