o
    â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   úDC:\Users\psant\Downloads\Anu Raj Backend\school\myapp\apscheduler.pyÚbuild_email_html   s   ,ÔD¼O±r   c              
   C   sr   zt jd| ||ddœddidd�}t d| ¡ › �¡ W d S  ty8 } zt d	|› �¡ W Y d }~d S d }~ww )
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|v sd|v r8dD ]}zt ||¡ ¡ }W  |S  ty5   Y qw |S dD ]}zt ||¡ ¡ }W  |S  tyQ   Y q:w |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 �]A}
�z|
jsOW qEt|
jtƒrot|
jƒ}|d u rnt d
|
j› d|
j› d�¡ W qEn|
j}|j	}|j
}||ks€||kr‚W qE|d7 }|
jtv r–t d|
j› �¡ W qE| d¡}|
jrîz-d|
j› d|› �}t|
j|
j|ƒ}t|dtj|
jg|dd� t d|
j› d|
j› �¡ W n+ tyí } zt d|
j› d|
j› d|› �¡ W Y d }~nd }~ww t d|
j› �¡ zC|jj d d�j dd�}| !¡ �r0|D ]}t"|j#dd|
j› d|
j› d|› d�d � �q
t d!|
j› d|
j› �¡ n	t d"|
j› �¡ W n t�yY } zt d#|
j› d|› �¡ W Y d }~nd }~ww t $|
j¡ |	d7 }	W qE t�y‡ } zt d$t%|
d%d&ƒ› d'|› �¡ W Y d }~qEd }~ww t d(|› d)|	› �¡ t&tƒd*k�r¦t '¡  t d+¡ W d S W d S  t�yÄ } zt d,|› �¡ W Y d }~d S d }~ww )-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ª   



ÿÿû

ú,€ÿ

ý€$€ÿ*€ÿþ€ÿrX   c               
   C   s„   t r	t d¡ d S zttd�} | jtdtddd� |  ¡  da t 	d¡ W d S  t
yA } zt d|› �¡ W Y d }~d S d }~ww )	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