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

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
        yar: yar.Yar;
    }
    interface Server {
        yar: yar.ServerYar;
    }
    interface ResponseToolkit {}
}

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