/*---------------------------------------------------------*\
| PhilipsWizSettingsEntry.cpp                               |
|                                                           |
|   User interface for OpenRGB Philips Wiz settings entry   |
|                                                           |
|   This file is part of the OpenRGB project                |
|   SPDX-License-Identifier: GPL-2.0-or-later               |
\*---------------------------------------------------------*/

#include "PhilipsWizSettingsEntry.h"
#include "ui_PhilipsWizSettingsEntry.h"

PhilipsWizSettingsEntry::PhilipsWizSettingsEntry(QWidget *parent) :
    BaseManualDeviceEntry(parent),
    ui(new Ui::PhilipsWizSettingsEntry)
{
    ui->setupUi(this);

    ui->WhiteStrategyComboBox->addItem(tr("Average"));
    ui->WhiteStrategyComboBox->addItem(tr("Minimum"));
}

PhilipsWizSettingsEntry::~PhilipsWizSettingsEntry()
{
    delete ui;
}

void PhilipsWizSettingsEntry::changeEvent(QEvent *event)
{
    if(event->type() == QEvent::LanguageChange)
    {
        ui->retranslateUi(this);
    }
}

void PhilipsWizSettingsEntry::loadFromSettings(const json& data)
{
    if(data.contains("ip"))
    {
        ui->IPEdit->setText(QString::fromStdString(data["ip"]));
    }

    if(data.contains("use_cool_white"))
    {
        ui->UseCoolWhiteCheckBox->setChecked(data["use_cool_white"]);
    }

    if(data.contains("use_warm_white"))
    {
        ui->UseWarmWhiteCheckBox->setChecked(data["use_warm_white"]);
    }

    if(data.contains("selected_white_strategy"))
    {
        ui->WhiteStrategyComboBox->setCurrentText(QString::fromStdString(data["selected_white_strategy"]));
    }
}

json PhilipsWizSettingsEntry::saveSettings()
{
    json result;
    /*-------------------------------------------------*\
    | Required parameters                               |
    \*-------------------------------------------------*/
    result["ip"]               = ui->IPEdit->text().toStdString();
    result["use_cool_white"]   = ui->UseCoolWhiteCheckBox->isChecked();
    result["use_warm_white"]   = ui->UseWarmWhiteCheckBox->isChecked();
    result["selected_white_strategy"]   = ui->WhiteStrategyComboBox->currentText().toStdString();

    return result;
}

bool PhilipsWizSettingsEntry::isDataValid()
{
    // stub
    return true;
}

static BaseManualDeviceEntry* SpawnPhilipsWizSettingsEntry(const json& data)
{
    PhilipsWizSettingsEntry* entry = new PhilipsWizSettingsEntry;
    entry->loadFromSettings(data);
    return entry;
}

REGISTER_MANUAL_DEVICE_TYPE("Philips Wiz", "PhilipsWizDevices", SpawnPhilipsWizSettingsEntry);
