import threading
from django.contrib.auth import get_user_model
from django.conf import settings
from django.template.loader import render_to_string
from django.core.mail import send_mail
import datetime
from django.core.mail import send_mail
from django.core.mail import EmailMessage
User = get_user_model()

# user register send email
class RegisterMailToUserThread(threading.Thread):
    def __init__(self, record_data):
        self.record_data = record_data
        threading.Thread.__init__(self)
    
    def run(self) -> None:
        print('>>>>>>>>>>>>>>>>>>>>>>>>>>.. thread register')
        name = self.record_data['name']
        username = self.record_data['username']
        current_otp = self.record_data['current_otp']
        msg_plain = 'Magazine'
        subject = 'MFAH Magazine OTP'
        from_email = settings.EMAIL_HOST_USER
        email_to = username
        msg_html = render_to_string('base/register.html', {'name': name,'otp':current_otp,'username':username})
        send_mail(subject, msg_plain, from_email, [email_to,'ashishk140@triazinesoft.com'], html_message=msg_html)
        return super().run()

# user resend send email
class ResendOTPMailToUserThread(threading.Thread):
    def __init__(self, record_data):
        self.record_data = record_data
        threading.Thread.__init__(self)

    def run(self) -> None:
        print('>>>>>>>>>>>>>>>>>>>>>>>>>>.. thread ResendOTP')
        name = self.record_data['name']
        username = self.record_data['username']
        current_otp = self.record_data['current_otp']
        msg_plain = 'Magazine'
        subject = 'MFAH Magazine OTP'
        from_email = settings.EMAIL_HOST_USER
        email_to = username
        msg_html = render_to_string('base/resendotp.html', {'name': name,'otp':current_otp,'username':username})
        send_mail(subject, msg_plain, from_email, [email_to,'ashishk140@triazinesoft.com'], html_message=msg_html,fail_silently=False,)
        return super().run()

# # from django.core.mail import EmailMultiAlternatives
# # from django.core import mail
# # class ResendOTPMailToUserThread(threading.Thread):
# #     def __init__(self, record_data):
# #         self.record_data = record_data
# #         threading.Thread.__init__(self)

# #     def run(self) -> None:
# #         print('>>>>>>>>>>>>>>>>>>>>>>>>>>.. thread ResendOTP')
# #         name = self.record_data['name']
# #         username = self.record_data['username']
# #         current_otp = self.record_data['current_otp']
# #         email_from = settings.EMAIL_HOST_USER

# #         send_mail(
# #             subject = 'Test Send Mail #1',
# #             message = 'Kindly Ignore',
# #             from_email = email_from,
# #             recipient_list = ['jpmaurya@triazinesoft.com','ashishk140@triazinesoft.com'],
# #             fail_silently = False,)

#         ###################################
#         # print(email_from,'===from email==')
#         # cc_email = ['ashishk140@triazinesoft.com',]
#         # print(cc_email,'===cc email==')
#         # recipient_list = ['ashishk140@triazinesoft.com']
#         # print(recipient_list,'=====recipient ===')
#         # msg_html = render_to_string('base/resendotp.html', {'name': name,'otp':current_otp,'username':username})
#         # reset_email = EmailMultiAlternatives(
#         #             subject = 'Magazine Reader Genrate otp',
#         #             body = msg_html,
#         #             from_email = email_from,
#         #             to = ['ashishk140@triazinesoft.com'],
#         #             cc = ['ashishk140@triazinesoft.com',],
    
#         #             # reply_to = cc_email,
#         #             )
#         # print(reset_email,'==========email======')
#         # trans_obj=Integration_log_summary.objects.filter(sale_date = surya_datas[0]['sale_date_time'],email_status = False,tranisition_source = "SURYA_API").update(email_status = True)
#         # reset_email.content_subtype = "html"
#         # reset_email.attach_alternative(html_content, "text/html")
#         # reset_email.send()
#         print('success','>>>>>>>>>>>>>>>>>>>>>>>>>')
#         # msg_plain = 'Magazine'
#         # subject = 'Magazine Reader Genrate otp'
#         # from_email = settings.EMAIL_HOST_USER
#         # cc_email = ['ashishk140@triazinesoft.com',]
#         # email_to = username
#         # msg_html = render_to_string('base/resendotp.html', {'name': name,'otp':current_otp,})
#         # send_mail(subject, msg_plain, from_email, [email_to],cc = cc_email, html_message=msg_html)
        # return super().run()

# user login send email
class LoginMailToUserThread(threading.Thread):
    def __init__(self, record_data):
        self.record_data = record_data
        threading.Thread.__init__(self)
    
    def run(self) -> None:
        print('>>>>>>>>>>>>>>>>>>>>>>>>>>.. thread LoginMail')
        name = self.record_data['name']
        username = self.record_data['username']
        current_otp = self.record_data['current_otp']
        msg_plain = 'Magazine'
        subject = 'MFAH Magazine OTP'
        from_email = settings.EMAIL_HOST_USER
        email_to = username
        msg_html = render_to_string('base/login.html', {'name': name,'otp':current_otp,'username':username})
        # email=[email_to]
        send_mail(subject, msg_plain, from_email,[email_to,'ashishk140@triazinesoft.com'], html_message=msg_html)
        # send_mail(subject, msg_plain, from_email,[email_to], html_message=msg_html)
        return super().run()

    

# user Contact send email
class ContactMailToUserThread(threading.Thread):
    def __init__(self, record_data):
        self.record_data = record_data
        threading.Thread.__init__(self)
    
    def run(self) -> None:
        print('>>>>>>>>>>>>>>>>>>>>>>>>>>.. thread Contact')
        name = self.record_data['name']
        username = self.record_data['username']
        message = self.record_data['message']
        # print(current_otp,'======current')
        msg_plain = 'Magazine'
        subject = 'Magazine Reader Project'
        from_email = settings.EMAIL_HOST_USER
        email_to = username
        msg_html = render_to_string('base/contact.html', {'name': name,'username':username,'message':message})
        send_mail(subject, msg_plain, from_email, [email_to,'ashishk140@triazinesoft.com'], html_message=msg_html)
        return super().run()


# user buy send email
class BuyMailToUserThread(threading.Thread):
    def __init__(self, record_data):
        self.record_data = record_data
        threading.Thread.__init__(self)
    
    def run(self) -> None:
        print('>>>>>>>>>>>>>>>>>>>>>>>>>>.. thread purchase')
        name = self.record_data['name']
        username = self.record_data['username']
        publisher = self.record_data['publisher']
        message = self.record_data['message']
        # print(current_otp,'======current')
        msg_plain = 'Magazine'
        subject = 'Your Transaction is success'
        from_email = settings.EMAIL_HOST_USER
        email_to = username
        msg_html = render_to_string('base/contact.html', {'name': name,'username':username,'message':message})
        send_mail(subject, msg_plain, from_email, [email_to,'ashishk140@triazinesoft.com',publisher,'ajay158@triazinesoft.com'], html_message=msg_html)
        return super().run()

# user buy send email
class FailMailToUserThread(threading.Thread):
    def __init__(self, record_data):
        self.record_data = record_data
        threading.Thread.__init__(self)
    
    def run(self) -> None:
        print('>>>>>>>>>>>>>>>>>>>>>>>>>>.. thread purchase')
        name = self.record_data['name']
        username = self.record_data['username']
        publisher = self.record_data['publisher']
        message = self.record_data['message']
        # print(current_otp,'======current')
        msg_plain = 'Magazine'
        subject = 'Your Transaction is failed'
        from_email = settings.EMAIL_HOST_USER
        email_to = username
        msg_html = render_to_string('base/fail.html', {'name': name,'username':username,'message':message})
        send_mail(subject, msg_plain, from_email, [email_to,'ashishk140@triazinesoft.com',publisher,'ajay158@triazinesoft.com'], html_message=msg_html)
        return super().run()


# user subscription send email
class SubcriptionMailToUserThread(threading.Thread):
    def __init__(self, record_data):
        self.record_data = record_data
        threading.Thread.__init__(self)
    
    def run(self) -> None:
        print('>>>>>>>>>>>>>>>>>>>>>>>>>>.. thread purchase')
        name = self.record_data['name']
        username = self.record_data['username']
        message = self.record_data['message']
        # print(current_otp,'======current')
        msg_plain = 'Magazine'
        subject = 'Your Transaction is success'
        from_email = settings.EMAIL_HOST_USER
        email_to = username
        msg_html = render_to_string('base/contact.html', {'name': name,'username':username,'message':message})
        send_mail(subject, msg_plain, from_email, [email_to,'ashishk140@triazinesoft.com','ajay158@triazinesoft.com'], html_message=msg_html)
        return super().run()

# user fail subscription send email
class FailSubcriptionMailToUserThread(threading.Thread):
    def __init__(self, record_data):
        self.record_data = record_data
        threading.Thread.__init__(self)
    
    def run(self) -> None:
        print('>>>>>>>>>>>>>>>>>>>>>>>>>>.. thread purchase')
        name = self.record_data['name']
        username = self.record_data['username']
        message = self.record_data['message']
        # print(current_otp,'======current')
        msg_plain = 'Magazine'
        subject = 'Your Transaction is failed'
        from_email = settings.EMAIL_HOST_USER
        email_to = username
        msg_html = render_to_string('base/fail.html', {'name': name,'username':username,'message':message})
        send_mail(subject, msg_plain, from_email, [email_to,'ashishk140@triazinesoft.com','ajay158@triazinesoft.com'], html_message=msg_html)
        return super().run()




# user hardcopy send email
class HardcopyMailToUserThread(threading.Thread):
    def __init__(self, record_data):
        self.record_data = record_data
        threading.Thread.__init__(self)
    
    def run(self) -> None:
        print('>>>>>>>>>>>>>>>>>>>>>>>>>>.. thread purchase')
        name = self.record_data['name']
        username = self.record_data['username']
        message = self.record_data['message']
        # print(current_otp,'======current')
        msg_plain = 'Magazine'
        subject = 'Your Transaction is success'
        from_email = settings.EMAIL_HOST_USER
        email_to = username
        msg_html = render_to_string('base/contact.html', {'name': name,'username':username,'message':message})
        send_mail(subject, msg_plain, from_email, [email_to,'ashishk140@triazinesoft.com'], html_message=msg_html)
        print(send_mail(subject, msg_plain, from_email, [email_to,'ashishk140@triazinesoft.com'], html_message=msg_html),'=====111')
        return super().run()

# user fail Hardcopy send email
class FailHardcopyMailToUserThread(threading.Thread):
    def __init__(self, record_data):
        self.record_data = record_data
        threading.Thread.__init__(self)
    
    def run(self) -> None:
        print('>>>>>>>>>>>>>>>>>>>>>>>>>>.. thread purchase')
        name = self.record_data['name']
        username = self.record_data['username']
        publisher = self.record_data['publisher']
        message = self.record_data['message']
        # print(current_otp,'======current')
        msg_plain = 'Magazine'
        subject = 'Your Transaction is failed'
        from_email = settings.EMAIL_HOST_USER
        email_to = username
        msg_html = render_to_string('base/fail.html', {'name': name,'username':username,'message':message})
        send_mail(subject, msg_plain, from_email, [email_to,'ashishk140@triazinesoft.com',publisher,'ajay158@triazinesoft.com'], html_message=msg_html)
        return super().run()