/*
accetta un parametro da riga di comando
esegue la generazione fornendo un numero,un simbolo, una parola, un simbolo, un numero
*/

package main

import (
  "fmt"
  "os"
  "966.it/PasswordGenerator"
  "github.com/gin-gonic/gin"
  "net/http"
  "flag"
)

func main() {
  // se true, visualizza alcuni messaggi in Generator

  var nFlag = flag.Int("n",6,"Numeri per il pin")
  var gFlag = flag.Bool("g",false,"Genera un pin sulla console")
  var sFlag = flag.Bool("s",false,"Genera una password")
  var fFlag = flag.String("f","","posizione directory/file da leggere")
  var bFlag = flag.Bool("b",false,"esegue il servizio http")
  var pFlag = flag.String("p","localhost:8080","Porta per il servizio http")
  var dbFlag = flag.Bool("db",false,"abilita la stampa messaggi")

  flag.Parse()

  var check bool = false
  if *dbFlag {
    fmt.Printf("Numero di elementi per il pin : %d\n",*nFlag)
    fmt.Printf("Genera solo un pin numerico   : %B\n",*gFlag)
    fmt.Printf("Genera una password alfanum.  : %B\n",*sFlag)
    fmt.Printf("esecuzione demone HTTP        : %B\n",*bFlag)
    fmt.Printf("Porta di default demone HTTP  : %s\n",*pFlag)
    fmt.Printf("Directory/file da leggere     : %s\n",*fFlag)
    fmt.Printf("Debug                         : %B\n\n",*dbFlag)

    fmt.Printf("Primo giro di verifiche\n")

   if *nFlag < 1 || *nFlag > 10  {
      fmt.Printf("Errore: lunghezza pin numerico fuori dal range 1-10\n") 
      check = true
    }
    if (*fFlag == "") && !(*gFlag && *sFlag) {
      fmt.Printf("Errore: non sono stati indicati i parametri dove trovare i file\n") 
      check = true
    }
  }

  if check {
    fmt.Printf("Verificare i parametri, c'e' qualcosa di errato\n")
    os.Exit(1)
  }

  if *gFlag {
    fmt.Printf("%s\n",mod.RunNumber(*nFlag,*dbFlag)) 
  }

  if *sFlag && *fFlag != "" {
    fmt.Printf("%s\n",mod.Run(*fFlag,*dbFlag))
  }

  if *bFlag {
    r := gin.Default()
    r.LoadHTMLGlob("templates/*")
    r.GET("/", func(c *gin.Context) {
      c.HTML(http.StatusOK,"index.tmpl",gin.H{
        "Password1":mod.Run(*fFlag,*dbFlag),
        "Password2":mod.Run(*fFlag,*dbFlag),
        "Password3":mod.Run(*fFlag,*dbFlag),
        "Password4":mod.RunNumber(*nFlag,*dbFlag),
        "Password5":mod.RunNumber(*nFlag+3,*dbFlag),
      })
    })

    r.GET("/json", func(c *gin.Context) {
      c.JSON(http.StatusOK,gin.H{
        "Password1":mod.Run(*fFlag,*dbFlag),
        "Password2":mod.Run(*fFlag,*dbFlag),
        "Password3":mod.Run(*fFlag,*dbFlag),
        "Password4":mod.RunNumber(*nFlag,*dbFlag),
        "Password5":mod.RunNumber(*nFlag+3,*dbFlag),
      })
    })
  
  r.Run(*pFlag)
  } 
}


