/*******************************************************************************
 * Copyright 2019 See AUTHORS file.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *   http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 ******************************************************************************/

package com.talosvfx.talos.runtime.modules;

import com.badlogic.gdx.graphics.Color;
import com.badlogic.gdx.utils.Json;
import com.badlogic.gdx.utils.JsonValue;
import com.talosvfx.talos.runtime.values.NumericalValue;

public class ColorModule extends AbstractModule {

    public static final int R = 0;
    public static final int G = 1;
    public static final int B = 2;
    public static final int OUTPUT = 0;

    NumericalValue r;
    NumericalValue g;
    NumericalValue b;
    NumericalValue output;

    Color tmpColor = new Color();

    float defaultR = 1, defaultG = 0, defaultB = 0;

    public ColorModule () {

    }

    @Override
    protected void defineSlots() {
        r = createInputSlot(R);
        g = createInputSlot(G);
        b = createInputSlot(B);

        output = createOutputSlot(OUTPUT);
    }

    @Override
    public void processValues() {

        if(r.isEmpty()) r.set(defaultR);
        if(g.isEmpty()) g.set(defaultG);
        if(b.isEmpty()) b.set(defaultB);

        output.set(r, g, b);
    }

    public void setR(float r) {
        defaultR = r;
    }

    public void setG(float g) {
        defaultG = g;
    }

    public void setB(float b) {
        defaultB = b;
    }

    public Color getColor() {
        tmpColor.set(defaultR, defaultG, defaultB, 1f);
        return tmpColor;
    }

    @Override
    public void write (Json json) {
        super.write(json);
        json.writeValue("r", defaultR);
        json.writeValue("g", defaultG);
        json.writeValue("b", defaultB);
    }

    @Override
    public void read (Json json, JsonValue jsonData) {
        super.read(json, jsonData);
        defaultR = jsonData.getFloat("r");
        defaultG = jsonData.getFloat("g");
        defaultB = jsonData.getFloat("b");
    }
}