import { ServerRoute } from '@hapi/hapi'
import Joi from '@hapi/joi'
import { options } from "../validators/global.validator.schema"
import * as serverValidator from "../validators/server.validator"
import { Common } from "../../utils/common"
import { error400, error401, error403, error404, error500 } from "../validators/global.validator.schema"
import { I18N } from '../../utils/i18n';
import { ServerHandler } from '../handlers/server.handler'
const serverHandler = new ServerHandler();


const routes: ServerRoute[] = [
    {
        method: 'GET',
        path: '/',
        handler: serverHandler.serverStatus,
        options: {
            tags: ['api', 'Application'],
            description: I18N.t('GET_SERVER_STATUS_ROUTE_DESCRIPTION'),
            notes: I18N.t('GET_SERVER_STATUS_NOTE'),
            auth: false,
            validate: {},
            response: {
                status: {
                    200: serverValidator.serverResponse,
                    400: error400,
                    401: error401,
                    403: error403,
                    404: error404,
                    500: error500
                }

            }
        }
    },
    {
        method: 'GET',
        path: '/cron/{name}',
        handler: serverHandler.runCron,
        options: {
            tags: ['api', 'Application'],
            description: I18N.t('GET_SERVER_STATUS_ROUTE_DESCRIPTION'),
            notes: I18N.t('GET_SERVER_STATUS_NOTE'),
            auth: false,
            validate: {
                params: serverValidator.cronRequest
            },
            response: {
                status: {
                    400: error400,
                    401: error401,
                    403: error403,
                    404: error404,
                    500: error500
                }

            }
        }
    },
    {
        method: 'GET',
        path: '/socketTest',
        handler: serverHandler.socketTest,
        options: {
            tags: ['api', 'Application'],
            description: I18N.t('TEST_SOCKET_EMITS'),
            notes: I18N.t('TEST_SOCKET_EMITS_NOTE'),
            auth: { strategies: ['jwt'], scope: ['admin', 'user'] },
            validate: {
                headers: Common.routeHeaders("authorized"),
                options: options,
                failAction: Common.failover,
            },
            response: {
                status: {
                    400: error400,
                    401: error401,
                    403: error403,
                    404: error404,
                    500: error500
                }

            }
        }
    },
    {
        method: 'POST',
        path: '/serverEvents',
        handler: serverHandler.serverEvents,
        options: {
            tags: ['api', 'Application'],
            description: I18N.t('TEST_SOCKET_EMITS'),
            notes: I18N.t('TEST_SOCKET_EMITS_NOTE'),
            auth: { strategies: ['jwt'], scope: ['admin', 'user'] },
            validate: {
                headers: Common.routeHeaders("authorized"),
                options: options,
                failAction: Common.failover,
            },
            response: {
                status: {
                    400: error400,
                    401: error401,
                    403: error403,
                    404: error404,
                    500: error500
                }
            }
        }
    }
]
export default routes