U
    âbj�9  ã                   @   sž   d dl Z d dlZd dlZd dlmZmZ d dlmZ d dlmZ d dl	m
Z
 e  e¡Ze d¡ZdZdZdaeƒ Zd	d
„ Zdd„ Zdd„ Zdd„ Zdd„ ZdS )é    N)ÚdatetimeÚ	timedelta)ÚBackgroundScheduler)Ú	send_mail)ÚsettingszAsia/Muscaté<   Fc                 C   s   d| › d|› d|› d�S )Nu˜  
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0"/>
<title>BSC Cricket Academy - Booking Reminder</title>
</head>
<body style="margin:0; padding:0; background:#f1f5f9; font-family: Arial, sans-serif;">

<table width="100%" cellpadding="0" cellspacing="0" style="background:#f1f5f9; padding: 30px 0;">
  <tr>
    <td align="center">
      <table width="520" cellpadding="0" cellspacing="0" style="max-width:520px; width:100%; border-radius:16px; overflow:hidden; border: 1px solid #e2e8f0;">

        <!-- TOP ACCENT LINE -->
        <tr>
          <td style="background:#ee4d0f; height:5px; font-size:0; line-height:0;">&nbsp;</td>
        </tr>

        <!-- HEADER -->
        <tr>
          <td style="background: linear-gradient(135deg, #ff6b35 0%, #f7c948 100%); padding: 28px 28px 22px;">
            <table width="100%" cellpadding="0" cellspacing="0">
              <tr>
                <td style="width:50px; vertical-align:middle;">
                  <div style="width:46px; height:46px; background:rgba(255,255,255,0.25); border-radius:50%; text-align:center; line-height:46px; font-size:22px;">
                    Ã°Å¸Â�Â�
                  </div>
                </td>
                <td style="padding-left:12px; vertical-align:middle;">
                  <p style="margin:0; font-size:18px; font-weight:700; color:white; letter-spacing:0.5px;">BSC CRICKET ACADEMY</p>
                  <p style="margin:4px 0 0; font-size:12px; color:rgba(255,255,255,0.85);">Booking Reminder</p>
                </td>
              </tr>
            </table>
          </td>
        </tr>

        <!-- BODY -->
        <tr>
          <td style="background:#ffffff; padding:26px 28px;">

            <p style="margin:0 0 4px; font-size:13px; color:#64748b;">Hello,</p>
            <p style="margin:0 0 22px; font-size:17px; font-weight:700; color:#0f172a;">uù  </p>

            <!-- REMINDER CARD -->
            <table width="100%" cellpadding="0" cellspacing="0" style="background:#fff8f0; border:1.5px solid #ff6b35; border-radius:14px; margin-bottom:22px;">
              <tr>
                <td style="padding:20px 22px;">

                  <table cellpadding="0" cellspacing="0" style="margin-bottom:16px;">
                    <tr>
                      <td style="font-size:18px; vertical-align:middle; padding-right:8px;">Ã°Å¸â€�â€�</td>
                      <td style="font-size:12px; font-weight:700; color:#ff6b35; letter-spacing:0.5px; vertical-align:middle; text-transform:uppercase;">
                        Your session starts in 1 hour
                      </td>
                    </tr>
                  </table>

                  <table width="100%" cellpadding="0" cellspacing="0">
                    <tr>
                      <!-- NET CARD -->
                      <td width="48%" style="background:#ffffff; border-radius:10px; border:1px solid #ffe0cc; padding:14px 16px; vertical-align:top;">
                        <p style="margin:0 0 6px; font-size:11px; color:#999999; text-transform:uppercase; letter-spacing:0.5px;">Net</p>
                        <table cellpadding="0" cellspacing="0">
                          <tr>
                            <td style="font-size:18px; vertical-align:middle; padding-right:6px;">Ã°Å¸Â�Å¸Ã¯Â¸Â�</td>
                            <td style="font-size:20px; font-weight:700; color:#ff6b35; vertical-align:middle;">u  </td>
                          </tr>
                        </table>
                      </td>
                      <td width="4%"></td>
                      <!-- TIME CARD -->
                      <td width="48%" style="background:#ffffff; border-radius:10px; border:1px solid #ffe0cc; padding:14px 16px; vertical-align:top;">
                        <p style="margin:0 0 6px; font-size:11px; color:#999999; text-transform:uppercase; letter-spacing:0.5px;">Start Time</p>
                        <table cellpadding="0" cellspacing="0">
                          <tr>
                            <td style="font-size:18px; vertical-align:middle; padding-right:6px;">Ã¢Â�Â°</td>
                            <td style="font-size:20px; font-weight:700; color:#ff6b35; vertical-align:middle;">uà  </td>
                          </tr>
                        </table>
                      </td>
                    </tr>
                  </table>

                </td>
              </tr>
            </table>

            <!-- GREEN NOTE -->
            <table width="100%" cellpadding="0" cellspacing="0" style="background:#f0fdf4; border-radius:10px; border:1px solid #bbf7d0; margin-bottom:22px;">
              <tr>
                <td style="padding:14px 16px;">
                  <table cellpadding="0" cellspacing="0">
                    <tr>
                      <td style="font-size:18px; vertical-align:top; padding-right:10px; padding-top:2px;">Ã¢Å“â€¦</td>
                      <td style="font-size:14px; line-height:1.6; color:#15803d;">
                        Please arrive <strong>10 minutes early</strong> and bring your gear. Enjoy your session at BSC Cricket Academy!
                      </td>
                    </tr>
                  </table>
                </td>
              </tr>
            </table>

            <!-- CONTACT -->
            <table width="100%" cellpadding="0" cellspacing="0">
              <tr>
                <td style="border-top:1px dashed #e2e8f0; padding-top:16px; font-size:12px; color:#94a3b8;">
                  Ã°Å¸â€œÅ¾ Questions? Call us at <strong style="color:#ff6b35;">+968 9XXX XXXX</strong>
                </td>
              </tr>
            </table>

          </td>
        </tr>

        <!-- FOOTER -->
        <tr>
          <td style="background:#1e1b18; padding:16px 24px;">
            <table width="100%" cellpadding="0" cellspacing="0">
              <tr>
                <td style="font-size:11px; color:#9ca3af;">Ã‚Â© 2026 BSC Cricket Academy. All rights reserved.</td>
                <td align="right" style="font-size:14px; color:#9ca3af; letter-spacing:6px;">Ã°Å¸â€œÂ¸ Ã°Å¸â€™Â¬</td>
              </tr>
            </table>
          </td>
        </tr>

      </table>
    </td>
  </tr>
</table>

</body>
</html>
    © )Úcustomer_nameÚnet_selectionÚ	start_strr   r   úKC:\Users\psant\Downloads\Anu Raj Backend NK APP\school\myapp\apscheduler.pyÚbuild_email_html   s    ,ÔD¼O±r   c              
   C   sp   z8t jd| ||ddœddidd�}t d| ¡ › �¡ W n2 tk
rj } zt d	|› �¡ W 5 d }~X Y nX d S )
Nz$https://exp.host/--/api/v2/push/sendÚdefault)ÚtoÚtitleÚbodyZsoundzContent-Typezapplication/jsoné
   )ÚjsonÚheadersÚtimeoutu   Ã°Å¸â€�â€� PUSH RESPONSE: u   Ã¢Â�Å’ PUSH ERROR: )ÚrequestsÚpostÚloggerÚinfor   Ú	ExceptionÚerror)Ú
expo_tokenr   r   ÚresponseÚer   r   r   Úsend_push_notification§   s    ü÷r   c              	   C   sº   |   ¡ }| dd¡ dd¡}| ¡ }d }d|ks8d|krxdD ]8}zt ||¡ ¡ }W  q¶W q< tk
rr   Y q<Y q<X q<n>dD ]8}zt ||¡ ¡ }W  q¶W q| tk
r²   Y q|Y q|X q||S )Nu   â€¯Ú ú ÚAMÚPM)z%I:%M%pz
%I:%M:%S%p)ú%H:%M:%Sz%H:%M)ÚstripÚreplaceÚupperr   ÚstrptimeÚtimeÚ
ValueError)ÚrawÚcleanedÚtime_objÚfmtr   r   r   Úparse_time_string¼   s$    

r/   c                  C   sŠ  ddl m} m} �z>t t¡}| ¡ }|ttd� }|j	}|j
}t d| d¡› �¡ t d|d›d|d›�¡ | jj|d	�}d}d}	|D �]Š}
�z@|
jsžW qŠt|
jtƒrÞt|
jƒ}|d krät d
|
j› d|
j› d�¡ W qŠn|
j}|j	}|j
}||k�s||k�rW qŠ|d7 }|
jtk�r2t d|
j› �¡ W qŠ| d¡}|
j�ræzZd|
j› d|› �}t|
j|
j|ƒ}t|dtj|
jg|dd� t d|
j› d|
j› �¡ W nD tk
�râ } z$t d|
j› d|
j› d|› �¡ W 5 d }~X Y nX nt d|
j› �¡ z†|jj d d�j dd�}| !¡ �rj|D ].}t"|j#dd|
j› d|
j› d|› d�d � �qt d!|
j› d|
j› �¡ nt d"|
j› �¡ W n< tk
�rº } zt d#|
j› d|› �¡ W 5 d }~X Y nX t $|
j¡ |	d7 }	W qŠ tk
�r } z"t d$t%|
d%d&ƒ› d'|› �¡ W 5 d }~X Y qŠX qŠt d(|› d)|	› �¡ t&tƒd*k�rNt '¡  t d+¡ W n4 tk
�r„ } zt d,|› �¡ W 5 d }~X Y nX d S )-Nr   )ÚBookingÚProfiles)Úminutesu/   Ã¢Â�Â³ SCHEDULER CHECKING - Current Oman Time: r$   u'   Ã°Å¸Å½Â¯ TARGET BOOKING TIME TO MATCH: Z02dú:)Úbooking_dateu(   Ã¢Â�Å’ INVALID TIME FORMAT IN DB FOR ID z: 'u   ' Ã¢â‚¬â€� Could not parse.é   u2   Ã¢Â�Â­Ã¯Â¸Â� SKIP DUPLICATE ALERT for Booking ID: z%I:%M %pu   Ã°Å¸Â�Â� BSC Cricket Academy - z starts at r    F)ÚsubjectÚmessageÚ
from_emailÚrecipient_listÚhtml_messageÚfail_silentlyu$   Ã°Å¸â€œÂ§ EMAIL SUCCESS -> Sent to: z | Booking ID: u   Ã¢Â�Å’ EMAIL FAILED for z | Booking ID z: u:   Ã¢Å¡Â Ã¯Â¸Â� EMAIL SKIP -> No email found for Booking ID: )Úpincodeu   Ã°Å¸Â�Â� BSC Cricket AcademyzHi z, z. Please be ready!)r   r   r   u#   Ã°Å¸â€œÂ± PUSH SUCCESS -> Sent to: u<   Ã¢Å¡Â Ã¯Â¸Â� PUSH SKIP -> No expo token found | Booking ID: u!   Ã¢Â�Å’ PUSH ERROR for Booking ID u   Ã¢Â�Å’ BOOKING LOOP ERROR (ID: ÚidÚUnknownz): u   Ã°Å¸â€œÅ  MATCHED: z bookings | ALERTS SENT: iè  u.   Ã°Å¸Â§Â¹ MEMORY CLEANUP: _alerted_ids cleared.u$   Ã¢Â�Å’ ATTENDANCE FUNCTION CRASHED: )(Zmyapp.modelsr0   r1   r   ÚnowÚOMAN_TZÚdater   ÚALERT_BEFOREÚhourÚminuter   r   ÚstrftimeÚobjectsÚfilterÚ
start_timeÚ
isinstanceÚstrr/   r   r=   Ú_alerted_idsÚemailr
   r   r	   r   r   ÚEMAIL_HOST_USERr   ÚwarningÚexcludeÚexistsr   r<   ÚaddÚgetattrÚlenÚclear)r0   r1   Znow_omanZ
today_omanZtarget_datetimeZtarget_hourZtarget_minuteZupcoming_bookingsZfound_countZalert_sent_countZbookingr-   Zb_hourZb_minuter   r6   ÚhtmlZmail_errÚprofilesÚprofileZpush_errZloop_errZmain_errr   r   r   Ú
attendance×   s�    


ÿ
ú4
ý
*2rX   c               
   C   s‚   t rt d¡ d S z8ttd�} | jtdtddd� |  ¡  da t 	d¡ W n2 t
k
r| } zt d|› �¡ W 5 d }~X Y nX d S )	NuD   Ã¢Å¡Â Ã¯Â¸Â� SCHEDULER: Already running. Skipping duplicate startup.)ÚtimezoneÚintervalZbooking_alertT)ZtriggerÚsecondsr=   Zreplace_existinguA   Ã°Å¸Å¡â‚¬ SCHEDULER STARTED: Oman Booking Alert Engine is ACTIVE.u   Ã¢Â�Å’ SCHEDULER START FAILED: )Úscheduler_startedr   rN   r   r@   Zadd_jobrX   ÚCHECK_EVERYÚstartr   r   r   )Z	schedulerr   r   r   r   Úattendance1E  s"    

ûr_   )ÚloggingÚpytzr   r   r   Z!apscheduler.schedulers.backgroundr   Údjango.core.mailr   Údjango.confr   Ú	getLoggerÚ__name__r   rY   r@   rB   r]   r\   ÚsetrK   r   r   r/   rX   r_   r   r   r   r   Ú<module>   s$   

 n