import { BlocBase } from "./bloc_base";
import { EventEmitter } from "./event_emitter_1";

export interface EventHandler<State> {
    (data : State): Function;
}

export abstract class Bloc<State extends Object> extends BlocBase<State> {


    private eventEmitter : EventEmitter<State>;

    constructor(initialState: State) {
        super(initialState);
        this.eventEmitter = new EventEmitter<State>();
    }


    on(event: string, handler: ((state: State) => any)) {
        console.log("state after adding event " + this._state)
        this.eventEmitter.on(event, handler)
    }

    call(event: string, state: State) {
        console.log(state)
        this.eventEmitter.emit(event, state)
    }


    addNewState(state: State) {
        this.emit(state)
    }

    
}