import { z } from "zod"

const sendSchema = z.object({
    forum: z.string(),
    text: z.string(),
})
.strict()

const getSchema = z.object({
    forum: z.string(),
    number: z.number()
})
.strict()


export default class ForumHandler {
    static handleSend(msg, ws) {
        try {
            global.db.posts.add(msg.text, msg.forum, ws.userEmail)
            global.Socket.broadcast({event: "new-post", app: "FORUM", forum: msg.forum, msg: this.handleGet({forum: msg.forum, number: 100})})
            return {success: true}
        } catch(e) {
            console.error(e)
        }
    }

    static handleGet(msg) {
        let data = global.db.posts.get(msg.forum, msg.number)
        return data
    }

    static handle(operation, msg, ws) {
        switch(operation) {
            case "SEND":
                if(!sendSchema.safeParse(msg).success) throw new Error("Incorrectly formatted Forum ws message!")
                return this.handleSend(msg, ws)
            case "GET":
                if(!getSchema.safeParse(msg).success) throw new Error("Incorrectly formatted Forum ws message!")
                return this.handleGet(msg)
        }

    }
}