// lib/db-connection.ts
export interface DbConnectionInput {
  host: string;
  port: string;
  database: string;
  user: string;
  password: string;
}

export interface ValidationResult {
  valid: boolean;
  error?: string;
}

export function validateDbConnectionInput(input: Partial<DbConnectionInput>): ValidationResult {
  if (!input.host || !input.host.trim()) {
    return { valid: false, error: "Database host is required" };
  }
  if (!input.database || !input.database.trim()) {
    return { valid: false, error: "Database name is required" };
  }
  if (!input.user || !input.user.trim()) {
    return { valid: false, error: "Database username is required" };
  }
  const port = input.port ? Number(input.port) : 3306;
  if (!Number.isInteger(port) || port < 1 || port > 65535) {
    return { valid: false, error: "Database port must be a valid number between 1 and 65535" };
  }
  return { valid: true };
}

/**
 * Builds a mysql:// connection URL, percent-encoding credentials so
 * special characters (@, :, /, etc. in a password) don't break the URL.
 */
export function buildMysqlUrl(input: DbConnectionInput): string {
  const port = input.port?.trim() || "3306";
  const user = encodeURIComponent(input.user.trim());
  const password = encodeURIComponent(input.password || "");
  const host = input.host.trim();
  const database = input.database.trim();
  return `mysql://${user}:${password}@${host}:${port}/${database}`;
}
