type DatabaseLikeError = Error & {
  code?: string;
  errno?: string | number;
  detail?: string;
  constraint?: string;
  cause?: unknown;
};

export function getDatabaseErrorMessage(error: unknown): string {
  const databaseError = error as DatabaseLikeError | undefined;

  if (databaseError?.message?.includes('DATABASE_URL is not configured')) {
    return 'Database configuration is missing. Please set DATABASE_URL and restart the app.';
  }

  if (databaseError?.code === '28P01') {
    return 'Database authentication failed. Please verify DATABASE_URL username and password.';
  }

  if (databaseError?.code === '3D000') {
    return 'Database does not exist. Please verify the DATABASE_URL database name.';
  }

  if (databaseError?.code === 'ECONNREFUSED' || databaseError?.errno === 'ECONNREFUSED') {
    return 'Database connection was refused. Please ensure PostgreSQL is running and DATABASE_URL is correct.';
  }

  if (databaseError?.message?.includes('ENOTFOUND')) {
    return 'Database host could not be resolved. Please verify DATABASE_URL host settings.';
  }

  if (databaseError?.code === '23502' && databaseError?.message?.includes('employee_id')) {
    return 'Training record schema is outdated in the database. Please run migrations and try again.';
  }

  if (databaseError?.code === '23505') {
    if (databaseError.constraint === 'employees_org_employee_code_idx') {
      return 'รหัสพนักงานนี้ถูกใช้งานแล้วในองค์กรนี้ กรุณาใช้รหัสพนักงานอื่น';
    }

    if (databaseError.constraint === 'departments_org_name_idx') {
      return 'ชื่อฝ่ายนี้มีอยู่แล้วในองค์กรนี้';
    }

    if (databaseError.constraint === 'positions_org_name_idx') {
      return 'ชื่อตำแหน่งนี้มีอยู่แล้วในองค์กรนี้';
    }

    if (databaseError.detail) {
      return `ข้อมูลซ้ำในระบบ: ${databaseError.detail}`;
    }

    return 'ข้อมูลซ้ำในระบบ กรุณาตรวจสอบข้อมูลและลองใหม่อีกครั้ง';
  }

  return 'Database connection failed. Please verify DATABASE_URL and that PostgreSQL is available.';
}
