# Build rust
FROM rust:bookworm as rust-build

RUN apt-get update && \
	apt-get install pkg-config musl-tools libssl-dev

RUN rustup update
ENV RUSTFLAGS='--remap-path-prefix $HOME=~ -C target-feature=+crt-static'

COPY . /src
WORKDIR /src

RUN rustup target add x86_64-unknown-linux-musl
RUN cargo build --target x86_64-unknown-linux-musl --release

FROM node:lts as node-build

ENV NODE_OPTIONS=--openssl-legacy-provider

COPY ./frontend /app
WORKDIR /app

RUN yarn install \
  --prefer-offline \
  --frozen-lockfile \
  --non-interactive \
  --production=false

RUN yarn build

RUN rm -rf node_modules

# Final container
FROM scratch as scratch-final
WORKDIR /

COPY --from=rust-build /usr/share/zoneinfo /usr/share/zoneinfo
COPY --from=rust-build /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/

COPY --from=rust-build /src/target/x86_64-unknown-linux-musl/release/m3u-filter /m3u-filter
COPY --from=node-build /app/build /web
COPY ./freeze_frame.ts /freeze_frame.ts
# config should be mounted as volume
# COPY ./config /config

ENTRYPOINT ["/m3u-filter"]
CMD ["-s", "-p", "/config"]

# Final container
FROM alpine:latest as alpine-final

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

WORKDIR /app

COPY --from=rust-build /src/target/x86_64-unknown-linux-musl/release/m3u-filter m3u-filter
COPY --from=node-build /app/build web
COPY ./freeze_frame.ts /freeze_frame.ts
# config should be mounted as volume
# COPY ./config config

ENTRYPOINT ["/sbin/tini", "--", "/app/m3u-filter"]
CMD ["-s", "-p", "/app/config"]