/*---------------------------------------------------------*\
| KasaSmartControllerDetect.cpp                             |
|                                                           |
|   Detector for Kasa Smart bulbs                           |
|                                                           |
|   Devin Wendt (umbreon222@gmail.com)          16 Feb 2023 |
|                                                           |
|   This file is part of the OpenRGB project                |
|   SPDX-License-Identifier: GPL-2.0-or-later               |
\*---------------------------------------------------------*/

#include "Detector.h"
#include "KasaSmartController.h"
#include "RGBController_KasaSmart.h"
#include "SettingsManager.h"

/******************************************************************************************\
*                                                                                          *
*   DetectKasaSmartControllers                                                             *
*                                                                                          *
*       Detect Kasa Smart devices                                                          *
*                                                                                          *
\******************************************************************************************/

void DetectKasaSmartControllers()
{
    json kasa_smart_settings;

    /*---------------------------------------------*\
    | Get Kasa Smart settings from settings manager |
    \*---------------------------------------------*/
    kasa_smart_settings = ResourceManager::get()->GetSettingsManager()->GetSettings("KasaSmartDevices");

    /*---------------------------------------------*\
    | If the Wiz settings contains devices, process |
    \*---------------------------------------------*/
    if(kasa_smart_settings.contains("devices"))
    {
        for(unsigned int device_idx = 0; device_idx < kasa_smart_settings["devices"].size(); device_idx++)
        {
            if(kasa_smart_settings["devices"][device_idx].contains("ip"))
            {
                std::string kasa_smart_ip = kasa_smart_settings["devices"][device_idx]["ip"];
                std::string name          = kasa_smart_settings["devices"][device_idx]["name"];

                KasaSmartController* controller = new KasaSmartController(kasa_smart_ip, name);
                if(!controller->Initialize())
                {
                    continue;
                }

                RGBController_KasaSmart* rgb_controller = new RGBController_KasaSmart(controller);
                ResourceManager::get()->RegisterRGBController(rgb_controller);
            }
        }
    }

}   /* DetectKasaSmartControllers() */

REGISTER_DETECTOR("KasaSmart", DetectKasaSmartControllers);
