export interface ValidationResult {
  isValid: boolean;
  errors: Record<string, string>;
}

export const validateSystemSettings = (settings: {
  systemName?: string;
  logoUrl?: string;
}): ValidationResult => {
  const errors: Record<string, string> = {};

  if (!settings.systemName || settings.systemName.trim().length === 0) {
    errors.systemName = 'Tên hệ thống không được để trống';
  } else if (settings.systemName.length > 100) {
    errors.systemName = 'Tên hệ thống không được vượt quá 100 ký tự';
  }

  if (settings.logoUrl && settings.logoUrl.trim().length > 0) {
    try {
      new URL(settings.logoUrl);
    } catch {
      errors.logoUrl = 'URL logo không hợp lệ';
    }
  }

  return {
    isValid: Object.keys(errors).length === 0,
    errors
  };
};

export const validateSMTP = (smtp: {
  host?: string;
  port?: number;
  user?: string;
  pass?: string;
  senderEmail?: string;
}): ValidationResult => {
  const errors: Record<string, string> = {};

  if (!smtp.host || smtp.host.trim().length === 0) {
    errors.host = 'SMTP Host không được để trống';
  }

  if (!smtp.port || smtp.port < 1 || smtp.port > 65535) {
    errors.port = 'SMTP Port phải từ 1 đến 65535';
  }

  if (!smtp.user || smtp.user.trim().length === 0) {
    errors.user = 'Username/Email không được để trống';
  } else if (!/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(smtp.user)) {
    errors.user = 'Email không hợp lệ';
  }

  if (!smtp.pass || smtp.pass.trim().length === 0) {
    errors.pass = 'Password không được để trống';
  }

  if (!smtp.senderEmail || smtp.senderEmail.trim().length === 0) {
    errors.senderEmail = 'Sender Email không được để trống';
  } else {
    // Check if it's in format "Name <email@domain.com>" or just "email@domain.com"
    const emailMatch = smtp.senderEmail.match(/<(.+)>/);
    const email = emailMatch ? emailMatch[1] : smtp.senderEmail;
    if (!/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(email.trim())) {
      errors.senderEmail = 'Sender Email không hợp lệ';
    }
  }

  return {
    isValid: Object.keys(errors).length === 0,
    errors
  };
};

export const validateRole = (role: {
  name?: string;
  code?: string;
}): ValidationResult => {
  const errors: Record<string, string> = {};

  if (!role.name || role.name.trim().length === 0) {
    errors.name = 'Tên vai trò không được để trống';
  } else if (role.name.length > 100) {
    errors.name = 'Tên vai trò không được vượt quá 100 ký tự';
  }

  if (!role.code || role.code.trim().length === 0) {
    errors.code = 'Mã vai trò không được để trống';
  } else if (!/^[A-Z0-9_]+$/.test(role.code)) {
    errors.code = 'Mã vai trò chỉ được chứa chữ hoa, số và dấu gạch dưới';
  } else if (role.code.length > 50) {
    errors.code = 'Mã vai trò không được vượt quá 50 ký tự';
  }

  return {
    isValid: Object.keys(errors).length === 0,
    errors
  };
};

export const validateEmail = (email: string): ValidationResult => {
  const errors: Record<string, string> = {};

  if (!email || email.trim().length === 0) {
    errors.email = 'Email không được để trống';
  } else if (!/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(email)) {
    errors.email = 'Email không hợp lệ';
  }

  return {
    isValid: Object.keys(errors).length === 0,
    errors
  };
};
