from django.shortcuts import render
from .models import *

from datetime import datetime
import subprocess

from configurazione.views import *

# Create your views here.
def CheckMailSize(request,DominioId=None):
  #verifica la dimensione delle email.

  #evita le verifiche di sicurezza, altrimenti si dovrebbe fare il login,
  #passa direttamente all'acquisizione.

  elenco_domini = None
  if DominioId:
    elenco_domini = Domini.objects.filter(tobedeleted=False).filter(id=DominioId)
  else:
    elenco_domini = Domini.objects.filter(tobedeleted=False)

  # una volta ottenuto l'elenco dei domini, procediamo con la scansione delle caselle di posta

  # costruzione della struttura su cui lavorarea
  pathmail = getConfigurazione("mail_home_structure")
  for ed  in elenco_domini:
    print(f"id {ed.id}")
    server = None
    try:
      server = ed.mail_server.server
    except MailServer.DoesNotExist as dnf:
      print("Server non definito - salto")

    print(f"server {server}")
 
    #elenco delle email:
    em = User.objects.filter(domain=ed.id).filter(tobedeleted=False).filter(enabled=True)
    print(f"numero di mail: {len(em)}") 
    totale_quota = 0

    for e in em:
      if server: 
        checkto = pathmail.format(**{'server':server,'domain':ed.domain,'mail':e.mail})
        print(f" check to {checkto}")

        comando = f'ssh root@{ed.mail_server.ip} du -sm /{ed.mail_server.server}/{ed.domain}/{e.mail}'
        print("c",comando)
        comando = comando.encode('utf-8')

        msgrisposta = "CHECKED"
        risposta=""
        quota = 0
        try:
          print("eseguo risposta")
          risposta = subprocess.check_output(comando,shell=True)
          print(f"risposta: {risposta}")
        except subprocess.CalledProcessError as cpe:
          print("Errore risposta")
          quota = 0
          msgrisposta = 'NOTCHECK'
          risposta = "0\t\0"
        else:
          print(risposta)
          risposta = risposta.decode().split('\t')[0]
          quota = risposta
          totale_quota = totale_quota + int(quota)


      print(f"Quota: {quota}/{totale_quota}")
      
      u = User.objects.get(pk=e.id)
      u.mail_quota = quota
      u.save()
    
    ed.mail_quota = totale_quota
    ed.save()
  


  data = {}
  data['elenco_domini'] = elenco_domini

  return render(request,"servizi.lista.mail.size.html",data)


def CheckHttpSize(request,DominioId=None):
  #verifica la dimensione delle email.

  #evita le verifiche di sicurezza, altrimenti si dovrebbe fare il login,
  #passa direttamente all'acquisizione.

  elenco_domini = None
  if DominioId:
    elenco_domini = Domini.objects.filter(tobedeleted=False).filter(id=DominioId)
  else:
    elenco_domini = Domini.objects.filter(tobedeleted=False)

  # una volta ottenuto l'elenco dei domini, procediamo con la scansione delle caselle di posta

  # costruzione della struttura su cui lavorare
  pathmail = getConfigurazione("ftp_home_structure")
  for ed  in elenco_domini:
    print(f"id {ed.id}")
    server = None

    try:
      server = ed.mail_server.server
    except MailServer.DoesNotExist as dnf:
      print("Server non definito - salto")

    print(f"server {server}")
 
    #elenco delle email:
    em = User.objects.filter(domain=ed.id).filter(tobedeleted=False).filter(enabled=True)
    print(f"numero di mail: {len(em)}") 
    totale_quota = 0

    for e in em:
      if server: 
        checkto = pathmail.format(**{'server':server,'domain':ed.domain,'mail':e.mail})
        print(f" check to {checkto}")

        comando = f'ssh root@{ed.mail_server.ip} du -sm /{ed.mail_server.server}/{ed.domain}/{e.mail}'
        print("c",comando)
        comando = comando.encode('utf-8')

        msgrisposta = "CHECKED"
        risposta=""
        quota = 0
        try:
          print("eseguo risposta")
          risposta = subprocess.check_output(comando,shell=True)
          print(f"risposta: {risposta}")
        except subprocess.CalledProcessError as cpe:
          print("Errore risposta")
          quota = 0
          msgrisposta = 'NOTCHECK'
          risposta = "0\t\0"
        else:
          print(risposta)
          risposta = risposta.decode().split('\t')[0]
          quota = risposta
          totale_quota = totale_quota + int(quota)


      print(f"Quota: {quota}/{totale_quota}")
      
      u = User.objects.get(pk=e.id)
      u.mail_quota = quota
      u.save()
    
    ed.mail_quota = totale_quota
    ed.save()
  


  data = {}
  data['elenco_domini'] = elenco_domini

  return render(request,"servizi.lista.http.size.html",data)

