import Joi from 'joi';

import { password } from '@/shared/validations/custom.validation.js';
import { generateJoiValidation } from '@/shared/validations/generateJoiValidation.js';
import User from '@/modules/user/user.model.js';
import { DeviceType } from '@/shared/constants/enum.constant';

export const register = () => ({
  body: generateJoiValidation(User.schema),
});

export const login = {
  body: Joi.object().keys({
    email: Joi.string().required(),
    password: Joi.string().required(),
  }),
};

export const logout = {
  body: Joi.object().keys({
    deviceToken: Joi.string().required(),
  }),
};

export const refreshTokens = {
  body: Joi.object().keys({
    refreshToken: Joi.string().required(),
  }),
};

export const forgotPassword = {
  body: Joi.object().keys({
    email: Joi.string().email().required(),
  }),
};

export const resetPassword = {
  query: Joi.object().keys({
    token: Joi.string().required(),
  }),
  body: Joi.object().keys({
    password: Joi.string().required().custom(password),
  }),
};

export const verifyEmail = {
  query: Joi.object().keys({
    token: Joi.string().required(),
  }),
};

export const generateOtp = {
  body: Joi.object().keys({
    phone: Joi.number().required(),
    dialCode: Joi.number().required(),
  }),
};

export const resendOtp = {
  body: Joi.object().keys({
    orderId: Joi.string().required(),
  }),
};

export const verifyOtp = {
  body: Joi.object().keys({
    orderId: Joi.string().required(),
    otp: Joi.number().required(),
    deviceToken: Joi.string().required(),
    deviceType: Joi.string().valid(...DeviceType).required(),
    phone: Joi.number().required(),
    dialCode: Joi.number().required(),
  }),
};
