FROM python:3.11-slim as base

ENV PYTHONDONTWRITEBYTECODE=1
ENV PYTHONUNBUFFERED=1

RUN apt-get update \
    && apt-get install -y --no-install-recommends \
        postgresql-client \
        build-essential \
        libpq-dev \
        gettext \
        curl \
    && curl -fsSL https://deb.nodesource.com/setup_18.x | bash - \
    && apt-get install -y nodejs \
    && rm -rf /var/lib/apt/lists/*

WORKDIR /app

COPY requirements/base.txt /app/requirements/
RUN pip install --no-cache-dir -r requirements/base.txt

FROM base as development

COPY requirements/development.txt /app/requirements/
RUN pip install --no-cache-dir -r requirements/development.txt

COPY . /app/

EXPOSE 8000

CMD ["python", "manage.py", "runserver", "0.0.0.0:8000"]

FROM base as production

COPY requirements/production.txt /app/requirements/
RUN pip install --no-cache-dir -r requirements/production.txt

# Create django user and group
RUN groupadd -r django && useradd -r -g django django

# Copy application files
COPY . /app/

# Create directories and set proper permissions
RUN mkdir -p /app/staticfiles /app/media && \
    chown -R django:django /app && \
    chmod -R 755 /app && \
    chmod -R 775 /app/staticfiles /app/media

# Build Tailwind CSS and collect static files during build (before switching to django user)
# This ensures static files are available even if collectstatic fails at runtime
RUN DJANGO_SETTINGS_MODULE=django_project.settings.build python manage.py tailwind install || echo "Tailwind install failed"
RUN DJANGO_SETTINGS_MODULE=django_project.settings.build python manage.py tailwind build || echo "Tailwind build failed"
RUN DJANGO_SETTINGS_MODULE=django_project.settings.build python manage.py collectstatic --noinput --clear || echo "Static collection failed during build, will retry at runtime"

# Fix permissions after collecting static files
RUN chown -R django:django /app/staticfiles && \
    chmod -R 755 /app/staticfiles

USER django

EXPOSE 8000

CMD ["gunicorn", "--bind", "0.0.0.0:8000", "--workers", "3", "django_project.wsgi:application"]