import { DashboardHandler } from "../handlers/dashboard.handler";
import { Common } from "../../utils/common";
import { I18N } from "../../utils/i18n";
import Joi from "joi";

const dashboardHandler = new DashboardHandler();

const error400 = Joi.object({
    statusCode: Joi.number().example(400),
    error: Joi.string().example('Bad Request'),
    message: Joi.string()
}).description('BAD_REQUEST');

const error401 = Joi.object({
    statusCode: Joi.number().example(401),
    error: Joi.string().example('Unauthorized'),
    message: Joi.string().example('Missing authentication')
}).description('UNAUTHORIZED');

const error403 = Joi.object({
    statusCode: Joi.number().example(403),
    error: Joi.string().example('Forbidden'),
    message: Joi.string().example('Insufficient scope')
}).description('FORBIDDEN');

const error404 = Joi.object({
    statusCode: Joi.number().example(404),
    error: Joi.string().example('Not Found'),
    message: Joi.string()
}).description('NOT_FOUND');

const error500 = Joi.object({
    statusCode: Joi.number().example(500),
    error: Joi.string().example('Internal Server Error'),
    message: Joi.string()
}).description('INTERNAL_SERVER_ERROR');

const analyticsResponse = Joi.object({
    message: Joi.string().example("REQUEST_PROCESSED_SUCCESSFULLY"),
    responseData: Joi.object({
        users: Joi.object({
            total: Joi.number()
        }),
        activeSubscriptions: Joi.object({
            monthly: Joi.number(),
            sixMonthly: Joi.number(),
            yearly: Joi.number(),
            total: Joi.number()
        }),
        revenue: Joi.object({
            last30Days: Joi.number()
        }),
        seaQA: Joi.object({
            totalQuestions: Joi.number(),
            pendingQuestions: Joi.number(),
            totalAnswers: Joi.number(),
            pendingAnswers: Joi.number()
        })
    }).allow(null)
}).description('SUCCESS');

const routes = [
    {
        method: 'GET',
        path: '/dashboard/analytics',
        handler: dashboardHandler.getAnalytics,
        options: {
            tags: ['api', 'Dashboard'],
            description: 'Get Analytics Data for Dashboard',
            notes: 'Returns counts for users, active subscriptions, revenue, and seaQA pending statuses.',
            auth: { mode: 'required', strategies: ['jwt'], scope: ['admin', 'superadmin'] },
            validate: {
                headers: Common.routeHeaders("authorized"),
                failAction: Common.failover
            },
            response: {
                status: {
                    200: analyticsResponse,
                    400: error400,
                    401: error401,
                    403: error403,
                    404: error404,
                    500: error500
                }
            },
            plugins: { 'hapi-swagger': { order: 1 } }
        }
    }
];

export default routes;
