import { Logger } from "log4js"
import { Server } from "@hapi/hapi"
import { Request, ResponseToolkit, Lifecycle } from "@hapi/hapi"
import { TUserModel } from "@/models/User"

declare global {
    var server: Server
    var logger: Logger
    var loggerSite: Logger
    var loggerSQL: Logger
}

interface Models {
    User: TUserModel
}

declare module "@hapi/hapi" {
    interface Request {
        getModel<T extends keyof Models, M extends Models[T]>(name: T): M
    }
    interface ResponseToolkit {}
}

export declare type Req = Request
export declare type Res = ResponseToolkit
export declare type ReturnValue = Promise<Lifecycle.ReturnValue>