FROM debian:trixie

# Install system dependencies
RUN apt-get update && apt-get install -y \
    curl \
    pkg-config \
    build-essential \
    libdbus-1-dev \
    libgtk-3-dev \
    libwebkit2gtk-4.1-dev \
    libayatana-appindicator3-dev \
    librsvg2-dev \
    libssl-dev \
    libasound2-dev \
    && rm -rf /var/lib/apt/lists/*

# Install Rust
RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y
ENV PATH="/root/.cargo/bin:${PATH}"

# Install Node.js (for frontend)
RUN curl -fsSL https://deb.nodesource.com/setup_20.x | bash - && \
    apt-get install -y nodejs && \
    rm -rf /var/lib/apt/lists/*

WORKDIR /app

# Copy Cargo files first for caching
COPY Cargo.toml ./
COPY shared/Cargo.toml shared/
COPY tscore/Cargo.toml tscore/
COPY tsaudio/Cargo.toml tsaudio/
COPY tsdb/Cargo.toml tsdb/
COPY tauri-app/src-tauri/Cargo.toml tauri-app/src-tauri/

# Create dummy source files for dependency caching
RUN mkdir -p shared/src && echo "pub fn dummy() {}" > shared/src/lib.rs && \
    mkdir -p tscore/src && echo "pub fn dummy() {}" > tscore/src/lib.rs && \
    mkdir -p tsaudio/src && echo "pub fn dummy() {}" > tsaudio/src/lib.rs && \
    mkdir -p tsdb/src && echo "pub fn dummy() {}" > tsdb/src/lib.rs && \
    mkdir -p tauri-app/src-tauri/src && echo "pub fn dummy() {}" > tauri-app/src-tauri/src/lib.rs

# Build dependencies (cached layer)
RUN cargo build 2>/dev/null || true

# Copy actual source
COPY . .

# Build
RUN cargo build -p shared -p tscore -p tsaudio -p tsdb

# Build frontend
RUN cd tauri-app/frontend && npm install && npm run build

# Final build
RUN cargo build

CMD ["cargo", "test", "-p", "shared", "-p", "tscore", "-p", "tsaudio", "-p", "tsdb"]
