FROM ruby:3.2.2-slim

# Fuso horário do container.
#
# POR QUE ISSO IMPORTA (caso real): a imagem sobe em UTC. O Rails até mostra a
# hora certa (`config.time_zone = "America/Sao_Paulo"`), mas TUDO que é do
# sistema operacional continuava 3h adiantado — timestamp de log, `date` nos
# scripts de bin/ e, o pior, o CRON: `every "*/30 8-18"` no config/schedule.rb
# rodava das 05h às 15h de Brasília, não das 08h às 18h.
#
# O cron do Debian lê `/etc/localtime`, não a variável TZ — por isso o symlink
# além do ENV. Os dois juntos cobrem processo Ruby e daemon de cron.
ENV TZ=America/Sao_Paulo
ENV DEBIAN_FRONTEND=noninteractive

# Dependências do sistema
# tzdata: explícito de propósito. O zoneinfo já vem na imagem hoje, mas se um
# rebuild futuro pegar uma base enxuta o symlink acima quebra em silêncio e a
# hora volta a ficar errada — que é exatamente o bug que estamos fechando.
RUN apt-get update -qq && apt-get install -y \
  build-essential \
  libpq-dev \
  nodejs \
  npm \
  curl \
  git \
  libvips \
  cron \
  tzdata \
  && ln -snf "/usr/share/zoneinfo/$TZ" /etc/localtime \
  && echo "$TZ" > /etc/timezone \
  && rm -rf /var/lib/apt/lists/*

# Diretório da app
WORKDIR /app

# Instala gems
COPY Gemfile Gemfile.lock* ./
RUN bundle install --jobs 4 --retry 3

# Copia o restante do código
COPY . .

# Pré-compila assets (em produção)
# RUN bundle exec rails assets:precompile

EXPOSE 3000

# O boot real (migrations, cron, servidor) mora em bin/docker-boot — ver os
# comentários lá. CMD aqui é só o fallback de quem roda a imagem sem o compose.
CMD ["bin/docker-boot"]
