import { MovingHeadState } from "rust_native_module";
import { Pattern, PatternOutput, RenderUpdate } from "./proto";
import { startAddresses } from "./stage";
import { Tuple4 } from "./types";

export class TestPattern implements Pattern {

  rgbw = [
    [255, 0, 0, 0],
    [0, 255, 0, 0],
    [0, 0, 255, 0],
    [0, 0, 0, 255],
  ]

  render(update: RenderUpdate): PatternOutput {
    let t = update.absolute % this.rgbw.length;
    let second = Math.floor(t);
    let brightness = 1 - (t % 1);

    return startAddresses.map((startAddress) => {

      let [r, g, b, w] = this.rgbw[second];

      let state: MovingHeadState = {
        startAddress: startAddress,
        pan: 0,
        tilt: 0,
        brightness: {
          type: "dimmer",
          value: brightness,
        },
        rgbw: [r, g, b, w],
        speed: 1,
        reset: false
      }
      return state;
    }) as Tuple4<MovingHeadState>;
  }

}
