FROM ubuntu:20.04

# 환경 변수 설정 (비대화형 설치)
ENV DEBIAN_FRONTEND=noninteractive
ENV TZ=Asia/Seoul

# Python 3.9 및 기본 도구 설치
RUN apt-get update && apt-get install -y \
    software-properties-common \
    && add-apt-repository ppa:deadsnakes/ppa \
    && apt-get update \
    && apt-get install -y \
    python3.9 \
    python3.9-dev \
    python3.9-distutils \
    python3-pip \
    python3-setuptools \
    python3-wheel \
    && rm -rf /var/lib/apt/lists/*

# Python 3.9를 기본 python으로 설정
RUN update-alternatives --install /usr/bin/python python /usr/bin/python3.9 1 && \
    update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.9 1

# pip 업그레이드
RUN python -m pip install --upgrade pip

# 시스템 패키지 설치 (OSMesa 및 headless 렌더링 지원)
RUN apt-get update && apt-get install -y \
    libgl1-mesa-glx \
    libgl1-mesa-dri \
    libgl1-mesa-dev \
    libglu1-mesa \
    libglu1-mesa-dev \
    libglfw3 \
    libglfw3-dev \
    libglib2.0-0 \
    libglib2.0-dev \
    libsm6 \
    libxext6 \
    libxrender1 \
    libgomp1 \
    libx11-6 \
    libxrandr2 \
    libxinerama1 \
    libxcursor1 \
    libxi6 \
    libasound2 \
    libffi-dev \
    libssl-dev \
    mesa-utils \
    xvfb \
    libegl1-mesa-dev \
    libgles2-mesa-dev \
    mesa-common-dev \
    libglapi-mesa \
    pkg-config \
    wget \
    curl \
    build-essential \
    cmake \
    git \
    && rm -rf /var/lib/apt/lists/*

# OSMesa 라이브러리 설치 (Ubuntu 20.04용) - 더 포괄적인 설치
RUN apt-get update && \
    apt-get install -y \
    libosmesa6-dev \
    libosmesa6 \
    libgl1-mesa-glx \
    libgl1-mesa-dri \
    libgl1-mesa-dev \
    libglu1-mesa \
    libglu1-mesa-dev \
    mesa-utils \
    mesa-common-dev \
    libglapi-mesa \
    libegl1-mesa-dev \
    libgles2-mesa-dev \
    && rm -rf /var/lib/apt/lists/*

# OSMesa 라이브러리 링크 생성 및 검증
RUN echo "OSMesa 라이브러리 설치 상태 확인..." && \
    find /usr -name "*OSMesa*" -type f 2>/dev/null && \
    ls -la /usr/lib/x86_64-linux-gnu/libOSMesa* && \
    ln -sf /usr/lib/x86_64-linux-gnu/libOSMesa.so.8 /usr/lib/x86_64-linux-gnu/libOSMesa.so && \
    ln -sf /usr/lib/x86_64-linux-gnu/libOSMesa.so.8 /usr/lib/libOSMesa.so && \
    echo "OSMesa 라이브러리 링크 생성 완료"

# OSMesa 설치 검증
RUN echo "OSMesa 설치 상태를 확인합니다..." && \
    ls -la /usr/lib/x86_64-linux-gnu/libOSMesa* && \
    dpkg -l | grep -E "(libosmesa|libgl)" && \
    echo "OSMesa 설치 검증 완료"

# 작업 디렉토리 설정
WORKDIR /app

# OSMesa 렌더링을 위한 환경 변수 설정 (최적화된 설정)
ENV PYOPENGL_PLATFORM=osmesa
ENV MESA_GL_VERSION_OVERRIDE=3.3
ENV MESA_GLSL_VERSION_OVERRIDE=330
ENV OSMESA_HEADLESS=1
ENV OPEN3D_HEADLESS=1
ENV DISPLAY=:99
ENV LIBGL_ALWAYS_SOFTWARE=1
ENV GALLIUM_DRIVER=llvmpipe
ENV LIBGL_ALWAYS_INDIRECT=1
ENV MESA_LOADER_DRIVER_OVERRIDE=llvmpipe
ENV LD_LIBRARY_PATH=/usr/lib/x86_64-linux-gnu:/usr/lib:/usr/local/lib:$LD_LIBRARY_PATH

# Python 의존성 설치
COPY requirements.txt .
RUN python -m pip install --upgrade pip && \
    python -m pip install --no-cache-dir --timeout 1000 -r requirements.txt

# 애플리케이션 코드 복사
COPY . .

# 실행 권한 부여
RUN chmod +x main.py

# 기본 실행 명령
CMD ["python", "main.py"]