#!/usr/bin/tcl
# aggiorna crediti di utente
# richiede in ingresso il db in cui cercare, il nome di utente ed i crediti consumati
# se crediti consumati ==-1 allora devo fare solo la verifica
# il db e' in formato nome_utente:crediti
# restituisce (su stdoutput) il numero crediti od un numero negativo se errore
#   errore -2: pochi parametri
#   errore -3: il file non esiste
#   errore -4: l'utente non esiste

# controllo ingresso
# $argv e' la stringa degli argomenti
# $argc il loro numero
if { $argc < 3 } {
#  puts "pochi argomenti (db utente consumati)=($argv)" 
  puts -2
  exit 
}

# interpreta gli argomenti
set db [lindex $argv 0]
set user [lindex $argv 1]
set cons [lindex $argv 2]
# controllo parametri ingresso
# puts "db=$db user=$user cosumati=$cons"

# apre db se esiste altrimenti da errore
if { [file exists $db] } {
  set fin [open $db r+]
} else {
  puts -3
  exit
}
if { $cons != -1 } {
  set fou [open "/var/tmp/temp" w]
}

# legge tutte le linee, le suddivide in elenco, che copia in nuovi
while { [gets $fin linea] != -1 } {
  set campi [split $linea ":"]
  set nuovi $campi
  
  # verifica se trova l'utente richiesto e ne estrae i crediti
  if { $user == [lindex $campi 0] } {
    set credits [lindex $campi 1]
    #se verifica leggo ed esco 
    if { $cons == -1 } {
      close $fin
      puts $credits
      set spare ""
      lvarcat spare "Caro " "$user" " i crediti a tua disposizione sono ..." "$credits" 
      write_file /home/httpd/account/spare $spare
      exit
    #se aggiorna decremento
    } else {
      set res [expr $credits - $cons]
      if { $res < 0 } { set res 0 }
      set nuovi [lreplace $campi 1 1 $res]    
    }
  }
  # se aggiorna ricreo stringa e la salvo
  if { $cons != -1 } {
    set t [join $nuovi ":"]
    puts $fou $t
  }
} 
  
close $fin
# Se non l'ha trovato (nella verifica) da errore
if { $cons == -1 } {
  puts -4
} else {
  close $fou
  exec mv /var/tmp/temp $db
}
exit
