const emailRegex = /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
// const ageRegex = /^(1[4-9]|2[0-9]|3[0-9]|4[0-9]|5[0-9]|6[0-9]|7[0-9]|8[0-9]|9[0-9])$/;
const namesWithoutSpecialCharacter = /^[a-zA-Z0-9_. -]*$/;

const fieldModule = {
  name: (name: string) => name.length < 3 && 'Campo nome completo está inválido',
  email: (email: string) => !emailRegex.test(email) && 'Preencha o e-mail corretamente',
  telphone: (telphone: string) => (telphone.length < 14) && 'Telefone inválido',
  cpf: (cpf: string) => (cpf.length < 14) && 'CPF inválido',
  razao_social: (razao_social: string) => (razao_social.length < 5 || !namesWithoutSpecialCharacter.test(razao_social)) && 'Campo razão social está inválido',
};

const fields = new Map();
fields.set('name', fieldModule.name);
fields.set('email', fieldModule.email);
fields.set('telphone', fieldModule.telphone);
fields.set('cpf', fieldModule.cpf);
fields.set('razao_social', fieldModule.razao_social);

const fieldStrategy = (field: string, value: string) => fields.get(field)(value) || null;

export default fieldStrategy;
