# Base stage with system dependencies and pnpm
FROM node:20-slim AS base

# Install system dependencies including HandBrakeCLI, SQLite, and FFmpeg
RUN apt-get update && apt-get install -y \
    handbrake-cli \
    sqlite3 \
    ffmpeg \
    && rm -rf /var/lib/apt/lists/*

# Install pnpm globally
RUN npm install -g pnpm

WORKDIR /app

# Dependencies stage - install all dependencies
FROM base AS dependencies

# Copy package files for dependency installation
COPY package.json pnpm-lock.yaml pnpm-workspace.yaml turbo.json ./
COPY apps/*/package.json ./apps/
COPY packages/*/package.json ./packages/

# Install all dependencies (including dev dependencies for building)
RUN pnpm install --frozen-lockfile

# Development stage
FROM dependencies AS development

# Copy all source code
COPY . .

# Expose ports (only web port 3000 is needed externally, API is proxied)
EXPOSE 3000

# Set the CLI as the default entrypoint for development
ENTRYPOINT ["pnpm", "run", "cli"]
CMD []

# Builder stage - builds the applications
FROM dependencies AS builder

# Copy all source code
COPY . .

# Build all applications
RUN pnpm run build

# Production stage - final runtime image
FROM base AS production

# Copy package files for production dependencies
COPY package.json pnpm-lock.yaml pnpm-workspace.yaml turbo.json ./
COPY apps/*/package.json ./apps/
COPY packages/*/package.json ./packages/

# Install only production dependencies
RUN pnpm install --frozen-lockfile --prod

# Copy built applications from builder stage
COPY --from=builder /app/apps/web/.next ./apps/web/.next
COPY --from=builder /app/apps/web/public ./apps/web/public
COPY --from=builder /app/apps/service/dist ./apps/service/dist
COPY --from=builder /app/apps/cli/dist ./apps/cli/dist

# Copy necessary config files for Next.js
COPY apps/web/next.config.ts apps/web/next.config.js ./apps/web/

# Expose ports (only web port 3000 is needed externally, API is proxied)
EXPOSE 3000

# Default command runs all services in production
CMD ["pnpm", "start"]