FROM ghcr.io/astral-sh/uv:bookworm-slim AS uv

FROM python:3.12 as dev

# Set environment variables
ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1
ENV PYTHONPATH /app
ENV UV_CACHE_DIR /app/.cache/uv
ENV UV_VENV_DIRECTORY /app/.venv

# Set work directory
WORKDIR /app

# Copy pyproject.toml
COPY pyproject.toml uv.lock ./

# Install system dependencies and uv
RUN apt-get update && apt-get install -y \
    build-essential \
    curl \
    gcc \
    nodejs \
    npm \
    gettext \
    && rm -rf /var/lib/apt/lists/*

COPY --from=uv /usr/local/bin/uv /usr/local/bin/uv

RUN uv sync --no-dev --frozen --no-install-project

# Copy project
COPY . .

# Install Tailwind CSS dependencies
RUN uv run manage.py tailwind install
# Build Tailwind CSS
RUN uv run manage.py tailwind build
# Collect static files
RUN uv run manage.py collectstatic --noinput
# Compile translation messages
RUN uv run manage.py compilemessages --locale=zh_Hans
# Create data directory for SQLite database
RUN mkdir -p /app/data && chmod 777 /app/data

FROM python:3.12-slim

ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1
ENV PYTHONPATH /app
ENV UV_CACHE_DIR /app/.cache/uv
ENV UV_VENV_DIRECTORY /app/.venv

COPY --from=uv /usr/local/bin/uv /usr/local/bin/uv
COPY --from=dev /app /app

WORKDIR /app

RUN apt-get update && apt-get install -y \
    curl \
    wget \
    gnupg \
    chromium \
    chromium-driver \
    fonts-arphic-ukai \
    && rm -rf /var/lib/apt/lists/*

# Create a non-root user
RUN mkdir -p /app/data/media/screenshots \
    && useradd -m -u 1000 appuser \
    && chown -R appuser:appuser /app

USER appuser

# Install dependencies using uv
RUN uv venv /app/.venv

ENV PATH="/app/.venv/bin:$PATH"
ENV VIRTUAL_ENV=/app/.venv

RUN uv sync --no-dev --frozen --no-install-project

# Expose port 8000
EXPOSE 8000

# Run the application
CMD ["uv", "run", "gunicorn", "--chdir", "/app", "core.wsgi:application", "--bind", "0.0.0.0:8000"]
