/**
 * @author Rémi Heredero (remi@heredero.ch)
 * @version. 0.0.6
 * @date 2023-06-15
 */

#ifndef FACTORY_H
#define FACTORY_H

#include <stdint.h>
#include <stdbool.h>

#include "../../board/led/led.h"
#include "../../board/button/button.h"
#include "../../middleware/clickHandler.h"
#include "../../middleware/blinker.h"
#include "../app.h"

typedef struct {
    LED l1_;
    LED l2_;
    LED l3_;
    LED l4_;
    LED l5_;
    LED l6_;
    LED l7_;
    LED l8_;
    LED l9_;
    LED l10_;
    BUTTON b1_;
    BUTTON b2_;
    BUTTON b3_;
    CLICK_HANDLER ch1_;
    CLICK_HANDLER ch2_;
    CLICK_HANDLER ch3_;
    BLINKER blL_;
    BLINKER blR_;
    BLINKER blB_;
    APP app_;
} Factory;


void Factory_init();
void Factory_build();
void Factory_start();

//these are global getters for our objects
LED* l1();
LED* l2();
LED* l3();
LED* l4();
LED* l5();
LED* l6();
LED* l7();
LED* l8();
LED* l9();
LED* l10();

BUTTON* b1();
BUTTON* b2();
BUTTON* b3();

CLICK_HANDLER* ch1();
CLICK_HANDLER* ch2();
CLICK_HANDLER* ch3();

BLINKER* blL();
BLINKER* blR();
BLINKER* blB();

APP* app();

#endif