# 宿舍电费监控 - 多阶段构建
# 阶段1: 编译 Go 静态二进制
FROM golang:1.22-alpine AS builder
WORKDIR /build
# 复制源码（go:embed 需要 static/ 在同一构建上下文）
COPY go.mod ./
COPY *.go ./
COPY static/ ./static/
# CGO_ENABLED=0 纯静态编译，适用于 scratch/alpine 运行
RUN CGO_ENABLED=0 GOOS=linux go build -trimpath -ldflags="-s -w" -o electric-monitor .

# 阶段2: 最小运行镜像
FROM alpine:3.20
# 时区: 定时任务需按北京时间 00:00 触发
RUN apk add --no-cache tzdata \
    && cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
    && echo "Asia/Shanghai" > /etc/timezone \
    && apk del tzdata
# 数据目录（历史记录 + 缓存挂载点）
RUN mkdir -p /app/data
WORKDIR /app
COPY --from=builder /build/electric-monitor .

# 端口与健康检查
EXPOSE 8000
HEALTHCHECK --interval=30s --timeout=5s --retries=3 \
  CMD wget -qO- http://127.0.0.1:8000/api/electric > /dev/null || exit 1

# 数据持久化卷
VOLUME ["/app/data"]

# 默认值（可由 docker-compose/.env 覆盖；账号密码与加密密钥必须由运行环境注入）
ENV HOST=0.0.0.0 \
    PORT=8000 \
    LZU_USERNAME= \
    LZU_PASSWORD= \
    LZU_SERVICE_ID=29615 \
    XF_PLATFORM=QHIT_EDU \
    XF_AUTH_APPID=2606161276416311297 \
    XF_SCHOOL_CODE=10730 \
    XF_YM_APPID=1810181825222034 \
    CACHE_FILE=/app/data/electric_cache.json \
    HISTORY_FILE=/app/data/electric_history.json \
    XF_CACHE_TTL=518400

CMD ["./electric-monitor"]
