from django.core.management.base import BaseCommand, CommandError
from catalog.models import User, News, Publisher, Topic, audioTime, Search
from django.db.models import Q
import os
import json

class Command(BaseCommand):
	help = 'Report database'


	def add_arguments(self, parser):
		parser.add_argument('json', nargs=1, type=str) #(options['basedir'][0]

	def handle(self, *args, **options):
		data = dict()
		data['users'] = User.objects.all().count()
		data['publishers'] = Publisher.objects.all().count()
		data['text'] = Publisher.objects.all().filter(type="texto").count()
		data['audio'] = Publisher.objects.all().filter(type="audio").count()
		data['documents'] = News.objects.all().count()
		data['searches'] = Search.objects.all().count()

		print ( "Users: " + str(User.objects.all().count()) )
		print ( "Publishers: " + str(Publisher.objects.all().count()) )
		print ( "\tText: " + str(Publisher.objects.all().filter(type="texto").count()) )
		print ( "\t\tDocuments: " + "{:,}".format(News.objects.all().count()) )
		print ( "\tAudio: " + str(Publisher.objects.all().filter(type="audio").count()) )
		print ( "Busquedas: " + str(Search.objects.all().count()) )


		minutes = sum([a.minutes for a in audioTime.objects.all()])
		print ( "\t\tRecorders hours: " + "{:,}".format(minutes/60.) )

		print("=======================================================")
		textSources = Publisher.objects.all().filter(type="texto")
		for t in textSources:
			if News.objects.all().filter(publisher=t).count() <= 0:
				continue
			newsP=News.objects.all().filter(publisher=t).order_by("date")
			count = str(newsP.count()) 
			date =  newsP[0].date.date().strftime('%m/%d/%Y')
			print(t.name + ", " + t.url + ", " + str(newsP.count()) +", "+ newsP[0].date.date().strftime('%d/%m/%Y') ) 
		print("=======================================================")
		audioSources = Publisher.objects.all().filter(type="audio")
		data["audioTime"]=0
		for a in audioSources:
			if audioTime.objects.all().filter(publisher=a).count() <=0:
				print ("No adutioTime for: ", a)
			else:
				minutes = audioTime.objects.all().filter(publisher=a)[0].minutes
				print(a.name + ", " + a.url + ", " + str(minutes))  
				data["audioTime"]+=minutes
		print(data)
		with open(options['json'][0], 'w') as outfile:
			outfile.write("m3Data="+json.dumps(data)+";")
			outfile.close()