import Joi from 'joi';

// Definir la interfaz para los filtros
export interface banescoConfirmacionTransaccion {
    dataRequest: {
        device: {
            type: string;
            description: string;
            ipAddress: string;
        },
        securityAuth: {
            sessionId: string;
        }
        transaction: {
            referenceNumber?: string;
            amount?: number;
            accountId?: string;
            trnDate?: string;
            startDt?: string;
            endDt?: string;
            phoneNum?: string;
            bankId?: string;
        }
    }
};
// Esquema de validación para los filtros
export const banescoConfirmacionTransaccionValidationSchema = Joi.object({
    dataRequest: Joi.object({
        device: Joi.object({
            type: Joi.string()
                .required()
                .messages({
                    'string.base': 'El campo "type" es obligatorio',
                }),
            description: Joi.string()
                .required()
                .messages({
                    'string.base': 'El campo "description" es obligatorio',
                }),
            ipAddress: Joi.string()
                .ip({ version: ['ipv4', 'ipv6'], cidr: 'forbidden' }) // valida IP
                .required()
                .messages({
                    'string.ip': 'El campo "ipAddress" debe ser una dirección IP válida',
                    'string.base': 'El campo "ipAddress" es obligatorio',
                }),
        })
            .required()
            .messages({
                'any.required': 'El objeto "device" es obligatorio',
                'object.base': 'El objeto "device" debe ser un objeto válido'
            }),
        securityAuth: Joi.object({
            sessionId: Joi.string()
                .optional()
                .allow('')
                .messages({
                    'string.base': 'El campo "sessionId" debe ser un texto.',
                }),
        })
            .optional()
            .messages({
                'object.base': 'El objeto "securityAuth" debe ser un objeto válido'
            }),
        transaction: Joi.object({
            referenceNumber: Joi
                .string()
                .allow('')
                .pattern(/^\d{6}$/)
                .optional()
                .messages({
                    'string.pattern.name': 'El formato del campo "referenceNumber" debe ser 6 dígitos',
                    'string.base': 'El campo "referenceNumber" debe ser un texto.',
                }),
            accountId: Joi.string()
                .pattern(/^\d{20}$/)
                .allow('')
                .optional()
                .messages({
                    'string.pattern.name': 'El formato del campo "accountId" debe ser 20 dígitos',
                }),
            amount: Joi.number()
                .optional()
                .messages({
                    'number.base': 'El campo "amount" debe ser un número',
                }),
            trnDate: Joi.string()
                .pattern(/^\d{4}-\d{2}-\d{2}$/)
                .optional()
                .allow('')
                .messages({
                    'string.pattern.name': 'El formato del campo "trnDate" debe ser YYYY-MM-DD',
                }),
            startDt: Joi.string()
                .pattern(/^\d{4}-\d{2}-\d{2}$/)
                .optional()
                .allow('')
                .messages({
                    'string.pattern.name': 'El formato del campo "startDt" debe ser YYYY-MM-DD',
                }),
            endDt: Joi.string()
                .pattern(/^\d{4}-\d{2}-\d{2}$/)
                .optional()
                .allow('')
                .messages({
                    'string.pattern.name': 'El formato del campo "endDt" debe ser YYYY-MM-DD',
                }),
            phoneNum: Joi.string()
                .pattern(/^\d{12}$/)
                .allow('')
                .optional()
                .messages({
                    'string.pattern.name': 'El formato del campo "phoneNum" debe ser 12 dígitos',
                }),
            bankId: Joi.string()
                .pattern(/^\d{4}$/)
                .allow('')
                .optional()
                .messages({
                    'string.pattern.name': 'El formato del campo "bankId" debe ser 4 dígitos',
                })

        })
            .required()
            .messages({
                'any.required': 'El objeto "transaction" es obligatorio',
                'object.base': 'El objeto "transaction" debe ser un objeto válido'
            })
    })
        .required()
        .messages({
            'any.required': 'El objeto "dataRequest" es obligatorio',
            'object.base': 'El objeto "dataRequest" debe ser un objeto válido'
        })
});