from django.core.mail import EmailMessage
from django.http import HttpRequest
from django.urls import reverse

from korektury.models import Komentar, Oprava
from personalni.models import Organizator


def send_email_notification_komentar(oprava: Oprava, autor: Organizator, request: HttpRequest):
	''' Rozesle e-mail pri pridani komentare / opravy,
		ktery obsahuje text vlakna opravy.
	'''

	# parametry e-mailu
	#odkaz = "https://mam.mff.cuni.cz/korektury/{}/".format(oprava.pdf.pk)
	odkaz = request.build_absolute_uri(reverse('korektury', kwargs={'pdf': oprava.pdf.pk}))
	odkaz = f"{odkaz}#op{oprava.id}-pointer"
	from_email = 'korekturovatko@mam.mff.cuni.cz'
	subject = 'Nová korektura od {} v {}'.format(autor, oprava.pdf.nazev)
	texty = []
	for kom in Komentar.objects.filter(oprava=oprava):
		texty.append((kom.autor.osoba.plne_jmeno(),kom.text))
	optext = "\n\n\n".join([": ".join(t) for t in texty])
	text = u"Text komentáře:\n\n{}\n\n=== Konec textu komentáře ===\n\
				\nodkaz do korekturovátka: {}\n\
				\nVaše korekturovátko\n".format(optext, odkaz)

	# Prijemci e-mailu
	emails = set()

	# nalezeni e-mailu na autory komentaru
	for org in oprava.informovani_orgove.all():
		email_komentujiciho = org.osoba.email
		if email_komentujiciho:
			emails.add(email_komentujiciho)

	# zodpovedni orgove
	for org in oprava.pdf.orgove.all():
		email_zobpovedny = org.osoba.email
		if email_zobpovedny:
			emails.add(email_zobpovedny)

	# odstran e-mail autora opravy
	email = autor.osoba.email
	if email:
		emails.discard(email)

	EmailMessage(
		subject=subject,
		body=text,
		from_email=from_email,
		to=list(emails),
	).send()