# -----------------------------------------------------------------------------
# Stage 1: Frontend (Next.js) ビルド
# -----------------------------------------------------------------------------
FROM node:20-bookworm-slim AS front-builder

WORKDIR /build/front

# pnpm セットアップ
RUN corepack enable pnpm

COPY front/package.json front/pnpm-lock.yaml ./
RUN pnpm install --frozen-lockfile

COPY front/ ./
# 同一オリジンで /api を Next の rewrites でプロキシするため、API URL は空にする
ENV NEXT_PUBLIC_API_URL=
RUN pnpm build

# -----------------------------------------------------------------------------
# Stage 2: 本番用イメージ（Python + Node で front/backend を同一コンテナで実行）
# -----------------------------------------------------------------------------
FROM python:3.13-slim AS runtime

# Node.js 20 をインストール（standalone サーバー実行用）
RUN apt-get update && apt-get install -y --no-install-recommends \
    curl \
    && curl -fsSL https://deb.nodesource.com/setup_20.x | bash - \
    && apt-get install -y --no-install-recommends nodejs \
    && apt-get clean && rm -rf /var/lib/apt/lists/*

# uv インストール（Astral 公式イメージからバイナリをコピー）
COPY --from=ghcr.io/astral-sh/uv:latest /uv /usr/local/bin/uv

WORKDIR /app

# バックエンド: 依存関係とソース
COPY pyproject.toml ./
RUN uv sync --no-dev --no-install-project

COPY src/ ./src/

# フロント: standalone 出力をコピー（server.js は standalone/ を cwd とするため .next/static と public はその直下に配置）
COPY --from=front-builder /build/front/.next/standalone ./standalone
COPY --from=front-builder /build/front/.next/static ./standalone/.next/static
COPY --from=front-builder /build/front/public ./standalone/public

# 起動スクリプト
COPY scripts/start.sh /app/scripts/start.sh
RUN chmod +x /app/scripts/start.sh

# App Runner は 8080 をデフォルトでリッスン（フロントのみ 8080、バックエンドは内部 8000）
ENV PORT=8080
ENV BACKEND_PORT=8000
EXPOSE 8080

ENTRYPOINT ["/app/scripts/start.sh"]
