{ pkgs ? import <nixpkgs> {
    config = {
      allowUnfree = true; # Allow unfree packages like Consul (BSL 1.1)
    };
  }
}:

let
  go = pkgs.go_1_24;
in

pkgs.mkShell {
  buildInputs = with pkgs; [
    # Go compiler
    go
    
    # Protocol Buffers compiler
    protobuf
    
    # Go tools (available in nixpkgs)
    go-tools  # Includes goimports, gopls, etc.
    golangci-lint
    
    # gRPC tools for testing
    grpcurl
    
    # Build tools
    gcc
    glibc
    
    # Version control
    git
    
    # Database tools (optional, for local development)
    postgresql
    
    # Service discovery (optional, for local development)
    consul
    
    # Docker tools (optional, for docker-compose)
    docker
    docker-compose
  ];
  
  # Set up environment variables and install Go tools
  shellHook = ''
    # Set Go environment
    export GOPATH="$HOME/go"
    export GOBIN="$GOPATH/bin"
    export PATH="$PATH:$GOBIN"
    export PATH="$PATH:${go}/bin"
    
    # Install Go tools if not already installed
    if ! command -v protoc-gen-go > /dev/null 2>&1; then
      echo "Installing protoc-gen-go..."
      ${go}/bin/go install google.golang.org/protobuf/cmd/protoc-gen-go@latest
    fi
    
    if ! command -v protoc-gen-go-grpc > /dev/null 2>&1; then
      echo "Installing protoc-gen-go-grpc..."
      ${go}/bin/go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@latest
    fi
    
    # Verify tools are available
    echo ""
    echo "=== Development Environment Ready ==="
    echo "Go version: $(${go}/bin/go version)"
    echo "protoc version: $(protoc --version 2>/dev/null || echo 'not found')"
    echo "golangci-lint version: $(golangci-lint --version 2>/dev/null || echo 'not found')"
    echo "grpcurl version: $(grpcurl --version 2>/dev/null || echo 'not found')"
    echo ""
    echo "Go tools:"
    echo "  protoc-gen-go: $(command -v protoc-gen-go > /dev/null 2>&1 && echo '✓ installed' || echo '✗ not found')"
    echo "  protoc-gen-go-grpc: $(command -v protoc-gen-go-grpc > /dev/null 2>&1 && echo '✓ installed' || echo '✗ not found')"
    echo "  goimports: $(command -v goimports > /dev/null 2>&1 && echo '✓ installed' || echo '✗ not found')"
    echo "======================================"
    echo ""
  '';
}


