# Build stage
FROM node:20-alpine AS node-builder

WORKDIR /app

COPY web/frontend/package*.json ./
RUN npm ci

COPY web/frontend/ ./
RUN npm run build

# Go stage
FROM golang:1.23-alpine AS go-builder

RUN apk add --no-cache git ca-certificates

WORKDIR /app

COPY go.mod go.sum ./
RUN go mod download

COPY . .

# Copy frontend build
COPY --from=node-builder /app/dist ./web/dist

RUN CGO_ENABLED=0 GOOS=linux go build -ldflags="-w -s" -o llamalink ./cmd/llamalink

# Final stage
FROM alpine:3.19

RUN apk add --no-cache ca-certificates curl

WORKDIR /app

# Create non-root user
RUN addgroup -g 1000 llamalink && \
    adduser -u 1000 -G llamalink -s /bin/sh -D llamalink

COPY --from=go-builder /app/llamalink .
COPY --from=go-builder /app/.env.example .env

# Create data directory
RUN mkdir -p /app/data && chown llamalink:llamalink /app/data

USER llamalink

EXPOSE 8000

ENV LLAMALINK_HOST=0.0.0.0
ENV LLAMALINK_PORT=8000

ENTRYPOINT ["./llamalink"]
