FROM golang:1.22-bullseye

# Add retry logic and cleanup apt cache
RUN apt-get update && \
    apt-get install -y --no-install-recommends \
        curl \
        git \
        nodejs \
        npm \
        vim && \
    apt-get clean && \
    rm -rf /var/lib/apt/lists/*

RUN curl -fsSL https://code-server.dev/install.sh | sh

RUN code-server \
    --install-extension golang.go \
    --install-extension eamodio.gitlens

RUN mkdir -p /workspace

WORKDIR /workspace

RUN mkdir -p ~/.config/code-server && \
    echo "bind-addr: 0.0.0.0:8080\nauth: none\ncert: false" > ~/.config/code-server/config.yaml

# Set up Go environment
ENV GOPATH=/go
ENV PATH=$GOPATH/bin:/usr/local/go/bin:$PATH

# Add Go environment to shell profile
RUN echo "export GOPATH=/go" >> /etc/profile && \
    echo "export PATH=$GOPATH/bin:/usr/local/go/bin:$PATH" >> /etc/profile && \
    echo "export GOPATH=/go" >> ~/.bashrc && \
    echo "export PATH=$GOPATH/bin:/usr/local/go/bin:$PATH" >> ~/.bashrc

# Install Go tools required for development
RUN go install golang.org/x/tools/gopls@v0.14.2 && \
    go install github.com/go-delve/delve/cmd/dlv@v1.22.0 && \
    go install golang.org/x/tools/cmd/goimports@v0.19.0 && \
    go install github.com/fatih/gomodifytags@v1.16.0 && \
    go install github.com/josharian/impl@v1.2.0 && \
    go install github.com/cweill/gotests/gotests@v1.6.0 && \
    go install github.com/haya14busa/goplay/cmd/goplay@v1.0.0 && \
    go install github.com/golangci/golangci-lint/cmd/golangci-lint@v1.56.2

EXPOSE 8080

CMD ["code-server", "--host", "0.0.0.0", "--port", "8080"]
