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()



# Send Forgot Password Link Via Email
class SentForgotPasswordLinkViaEmailThread(threading.Thread):
    def __init__(self, record_data):
        self.record_data = record_data
        threading.Thread.__init__(self)

    def run(self) -> None:
        print('>>>>>>>>>>>>>>>>>>>>>>>>>>.. thread LoginMail')
        requested_email = self.record_data['requested_email']
        name = self.record_data['name']
        userid = self.record_data['userid']
        base_url = self.record_data['base_url']
        url = f"{base_url}/user/change_password/{userid}/"
        msg_plain = 'Magazine'
        subject = 'Link to reset your password'
        from_email = settings.EMAIL_HOST_USER
        email_to = requested_email
        msg_html = render_to_string('web/emailtemplate/index.html', {'name': name,'base_url':url})
        # email=[email_to]
        send_mail(subject, msg_plain, from_email,[email_to,'ajay158@triazinesoft.com'], html_message=msg_html)
        # send_mail(subject, msg_plain, from_email,[email_to], html_message=msg_html)
        print('success')
        return super().run()


class ForgotPasswordVerificationThread(threading.Thread):
    def __init__(self, record_data):
        self.record_data = record_data
        threading.Thread.__init__(self)

    def run(self) -> None:
        print('>>>>>>>>>>>>>>>>>>>>>>>>>>.. thread LoginMail')
        requested_email = self.record_data['email']
        full_name = self.record_data['full_name']
        msg_plain = 'Magazine'
        subject = 'Change Password verfication email'
        from_email = settings.EMAIL_HOST_USER
        email_to = requested_email
        msg_html = render_to_string('web/emailtemplate/index2.html', {'name': full_name})
        # email=[email_to]
        send_mail(subject, msg_plain, from_email,[email_to,'ajay158@triazinesoft.com'], html_message=msg_html)
        # send_mail(subject, msg_plain, from_email,[email_to], html_message=msg_html)
        print('success')
        return super().run()


# Send OTP Via Email
class SentOTPViaEmailThread(threading.Thread):
    def __init__(self, record_data):
        self.record_data = record_data
        threading.Thread.__init__(self)

    def run(self) -> None:
        requested_email = self.record_data['requested_email']
        name = self.record_data['name']
        otp = self.record_data['otp']

        msg_plain = 'Magazine'
        subject = 'Email Verification'
        from_email = settings.EMAIL_HOST_USER
        email_to = requested_email
        msg_html = render_to_string('base/login.html', {'name': name,'otp':otp})
        # email=[email_to]
        send_mail(subject, msg_plain, from_email,[email_to,'ajay158@triazinesoft.com'], html_message=msg_html)
        # send_mail(subject, msg_plain, from_email,[email_to], html_message=msg_html)
        print('success')
        return super().run()

class MagazineApprovedEmailTread(threading.Thread):
    def __init__(self, record_data):
        self.record_data = record_data
        threading.Thread.__init__(self)

    def run(self) -> None:
        publisher_id = self.record_data['publisher_id']
        magazine_name = self.record_data['magazine_name']
        status = self.record_data['status']
        extra = self.record_data['extra']
        publisher = User.objects.filter(id=publisher_id).last()
        publisher_fullname = publisher.first_name + publisher.last_name
        publisher_email = publisher.email

        msg_plain = 'Magazine'
        subject = 'Magazine Approval/Disapproval'
        msg = f'Your Magazine "{magazine_name}" is {status} by admin {extra}.'
        print(msg)
        from_email = settings.EMAIL_HOST_USER
        email_to = publisher_email
        msg_html = render_to_string('web/emailtemplate/aproval_status.html', {'name': publisher_fullname,'msg':msg})
        # email=[email_to]
        send_mail(subject, msg_plain, from_email,[email_to,'kamalk@triazinesoft.com'], html_message=msg_html)
        # send_mail(subject, msg_plain, from_email,[email_to], html_message=msg_html)
        print('success')
        return super().run()

class MagazineStatusEmailTread(threading.Thread):
    def __init__(self, record_data):
        self.record_data = record_data
        threading.Thread.__init__(self)

    def run(self) -> None:
        publisher_id = self.record_data['publisher_id']
        magazine_name = self.record_data['magazine_name']
        status = self.record_data['status']
        
        publisher = User.objects.filter(id=publisher_id).last()
        publisher_fullname = publisher.first_name + publisher.last_name
        publisher_email = publisher.email

        msg_plain = 'Magazine'
        subject = 'Magazine Activate/Deactivate'
        msg = f'Your Magazine "{magazine_name}" is {status} by admin.'
        print(msg)
        from_email = settings.EMAIL_HOST_USER
        email_to = publisher_email
        msg_html = render_to_string('web/emailtemplate/aproval_status.html', {'name': publisher_fullname,'msg':msg})
        send_mail(subject, msg_plain, from_email,[email_to,'kamalk@triazinesoft.com'], html_message=msg_html)
        # send_mail(subject, msg_plain, from_email,[email_to], html_message=msg_html)
        print('success')
        return super().run()


# Withdraw request Mail
class WithdrawRequestStatusEmailTread(threading.Thread):
    def __init__(self, record_data):
        self.record_data = record_data
        threading.Thread.__init__(self)

    def run(self) -> None:
        requested_email = self.record_data['requested_email']
        name = self.record_data['name']
        amount = self.record_data['amount']
        status = self.record_data['status']
        print(requested_email )
        msg_plain = 'Withdrawal Request'
        subject = 'Withdrawal Request Approval/Disapproval'
        msg = f'Your request for amount withdrawal $"{amount}" is {status} by admin.'
        print(msg)
        from_email = settings.EMAIL_HOST_USER
        email_to = requested_email
        msg_html = render_to_string('web/emailtemplate/aproval_status.html', {'name': name,'msg':msg})
        # email=[email_to]
        send_mail(subject, msg_plain, from_email,[email_to,'kamalk@triazinesoft.com'], html_message=msg_html)
        # send_mail(subject, msg_plain, from_email,[email_to], html_message=msg_html)
        print('success')
        return super().run()
    
# Delivery Request Thread
class DeliveryRequestStatusEmailTread(threading.Thread):
    def __init__(self, record_data):
        self.record_data = record_data
        threading.Thread.__init__(self)

    def run(self) -> None:
        requested_email = self.record_data['requested_email']
        status_code = self.record_data['status_code']
        name = self.record_data['name']
        status = self.record_data['status']
        print(status_code,"=============")
        print(type(status_code))
        print(requested_email )
        msg_plain = 'Magzine Delivery'
        subject = 'Magazine Delivery'
        if status_code == '2':
            msg = f'Your Magazine is {status} to delivere to your address.'
        elif status_code == '1':
            msg = f'Your Magazine is {status} to your address.'
        elif status_code == '0':
            msg = f'Your Magazine is {status} by admin.'
        else:
            msg = ''

        print(msg)
        from_email = settings.EMAIL_HOST_USER
        email_to = requested_email
        msg_html = render_to_string('web/emailtemplate/delivery.html', {'name': name,'msg':msg})
        # email=[email_to]
        send_mail(subject, msg_plain, from_email,[email_to,'kamalk@triazinesoft.com'], html_message=msg_html)
        # send_mail(subject, msg_plain, from_email,[email_to], html_message=msg_html)
        print('success')
        return super().run()    

    