# Installation

Questo documento descrive i passi per preparare ed eseguire l'applicazione nella cartella `sources/docker-angular/nodejs/ecservice` usando `nvm`.

## Panoramica
- Versione Node raccomandata: `20.13.1`
- Usa `nvm` (Linux/macOS) o `nvm-windows` (Windows)

---

## Sezione A — Windows (nvm-windows)

### Requisiti
- Usa `nvm-windows` se sei su Windows: https://github.com/coreybutler/nvm-windows
- PowerShell (esegui come Amministratore per alcune operazioni)

### Installare Node con nvm-windows
1. Installa `nvm-windows` seguendo la documentazione ufficiale.
2. Installa e attiva la versione raccomandata:
```powershell
nvm install 20.13.1
nvm use 20.13.1
node -v
npm -v
```

### Problemi noti con `nvm-windows` e `npm` mancanti
Se dopo l'installazione `npm` non è disponibile, controlla la cartella della versione:

1. Apri Esplora file e vai in:
`C:\Users\<TUO_UTENTE>\AppData\Roaming\nvm\v20.13.1\`
2. Verifica che esista `node_modules\npm` e che i file `npm`, `npm.cmd`, `npx`, `npx.cmd` siano presenti nella cartella principale della versione.

Se `node_modules\npm` manca o è vuota:
- Scarica lo zip ufficiale di Node (es. `node-v20.13.1-win-x64.zip`) da https://nodejs.org/dist/
- Estrai la cartella `node_modules\npm` dallo zip e copiala in `C:\Users\<TUO_UTENTE>\AppData\Roaming\nvm\v20.13.1\node_modules\npm`

Poi, in PowerShell (amministratore), esegui per ripristinare il symlink:
```powershell
nvm off
nvm on
nvm use 20.13.1
```

### Installare dipendenze del progetto e avvio
```powershell
cd "C:\path\to\workspace\sources\docker-angular\nodejs\ecservice"
rm -r node_modules package-lock.json
npm install
node ecservice.js
# oppure
npm start
```

Lo startup può essere eseguito anche con il file:
`sources/docker-angular/nodejs/ecservice/start-ecservice.cmd`

### Avviare automaticamente all'accesso (opzionale)
Per avviare automaticamente il servizio all'accesso di Windows, copia `start-ecservice.cmd` in:
`C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp`

### Risolvere `EADDRINUSE` su Windows
```powershell
netstat -ano | findstr :4649
taskkill /PID <PID> /F
```

---

## Sezione B — Linux (o WSL)

### Requisiti di sistema
- Git (opzionale)
- build-essential, libcups2-dev, libusb-1.0-0-dev (se servono moduli nativi o stampa)

### Installazione di dipendenze di sistema
```bash
sudo apt update
sudo apt install -y build-essential libcups2-dev libusb-1.0-0-dev
```

Se ti serve `node-gyp` globalmente (per compilare moduli nativi):
```bash
npm install -g node-gyp
```

### Installare NVM e Node
1. Installa `nvm` seguendo la pagina ufficiale: https://github.com/nvm-sh/nvm
2. Installa e usa la versione raccomandata:
```bash
nvm install 20.13.1
nvm use 20.13.1
node -v   # deve mostrare v20.13.1
npm -v
```

### Installare le dipendenze del progetto
```bash
cd sources/docker-angular/nodejs/ecservice
rm -rf node_modules package-lock.json
npm install
```

### Avviare il servizio
```bash
node ecservice.js
# oppure, se presente, npm start
npm start
```

### Esecuzione dentro container Docker
Se vuoi eseguire all'interno di un container già avviato:
```bash
docker exec -it <ContainerNameOrID> bash
cd /workspaces/angular-container/sources/docker-angular/nodejs/ecservice
node ecservice.js
```

Nota: Docker potrebbe occupare la porta usata dal servizio (es. 4649). In tal caso ferma il container o scegli una porta diversa.

### Risolvere `EADDRINUSE` (porta già in uso)
```bash
sudo lsof -i :4649
sudo kill -9 <PID>
# verifica che la porta sia libera
ss -ltnp | grep 4649
```

---

## Verifiche e troubleshooting rapido
- Verifica versioni: `node -v` e `npm -v`
- Errori di compilazione moduli nativi: assicurati di avere gli strumenti di build (Linux: `build-essential`; Windows: Visual Studio Build Tools)
- `EADDRINUSE`: identifica e termina il processo oppure cambia la porta nelle impostazioni dell'app

## Note finali
- Mantieni `node_modules` e `package-lock.json` fuori da commit se usi repository condivisi
- Se desideri, posso aggiungere istruzioni per systemd (Linux) o per creare un servizio Windows (nssm).

