import {Controller, view, Session, Inject, Injectable, Locale, Validator, WebSocketBus, JSONMessageEvent, Logging, Bus, WebSocketCloseEvent} from '@extollo/lib'
import {UserLogin} from "../../../types/UserLogin";

@Injectable()
export class Home extends Controller {
    @Inject()
    protected readonly session!: Session;

    @Inject()
    protected readonly locale!: Locale;

    @Inject()
    protected readonly logging!: Logging

    public welcome() {
        this.session.set('app_visits', this.session.get('app_visits', 0) + 1)

        const valid = new Promise<UserLogin>(() => {})

        return view('@extollo:welcome', {
            app_visits: this.session.get('app_visits'),
            locale: this.locale.helper(),
        })
    }

    public async socket(ws: WebSocketBus): Promise<void> {
        ws.subscribe(JSONMessageEvent, event => {
            this.logging.info('Got JSON message event:')
            this.logging.debug(event.value)
        })

        const interval = setInterval(() => {
            ws.push(new JSONMessageEvent({ hello: 'world!' }))
        }, 5000)

        await this.request.make<Bus>(Bus)
            .subscribe(WebSocketCloseEvent, () => {
                clearInterval(interval)
            })
    }

    public test() {
        return new Validator<UserLogin>()
    }
}
