/*---------------------------------------------------------*\
| RGBController_LightSalt.h                                 |
|                                                           |
|   RGBController for LightSalt Peripherals                 |
|                                                           |
|   James Buren (braewoods)                     23 Jul 2024 |
|                                                           |
|   This file is part of the OpenRGB project                |
|   SPDX-License-Identifier: GPL-2.0-or-later               |
\*---------------------------------------------------------*/

#pragma once

#include "RGBController.h"
#include "LightSaltController.h"

class RGBController_LightSalt : public RGBController
{
public:
    ~RGBController_LightSalt();

    void SetupData(LightSaltController* controller_ptr);
    void SetupModes();

    void SetupZones();
    void ResizeZone(int zone, int new_size);

    void DeviceUpdateColors(bool save);
    void DeviceUpdateLEDs();
    void UpdateZoneLEDs(int zone);
    void UpdateSingleLED(int led);

    void DeviceUpdateMode();
    void DeviceSaveMode();

protected:
    struct
    {
        struct
        {
            std::string name;
            int type;
        } device;
        struct
        {
            int sets;
            int rows;
            int columns;
            int count;
            char const * const * names;
            const int* indices;
            const int* deflections;
        } led;
        struct
        {
            unsigned int height;
            unsigned int width;
            unsigned int* matrix;
        } map;
    } table;
    LightSaltController* controller;
};
