o
    j                     @  s   d dl mZ d dlZd dlmZ d dlmZmZmZm	Z	 d dl
mZmZmZmZmZ edd ZdNdOddZdNdPddZdNdQddZdRdSddZdTdd ZdUd%d&ZdVd'd(Z				dWdXd4d5ZdYd8d9ZdZd:d;Zd[dCdDZd\d]dIdJZd^dLdMZdS )_    )annotationsN)contextmanager)AnyDictListOptional)DB_HOSTDB_NAMEDB_PASSDB_PORTDB_USERc               
   c  sf    t jtttttdt jjdd} zz	| V  | 	  W n t
y&   |    w W |   d S |   w )Nutf8mb4F)hostuserpassworddatabaseportcharsetcursorclass
autocommit)pymysqlconnectr   r   r
   r	   r   cursors
DictCursorcommit	Exceptionrollbackclose)conn r   $/var/www/divulga_bot/bot/database.pydb	   s(   
r!   r   sqlstrparamstuplereturnOptional[Dict[str, Any]]c              	   C  sv   t  .}| }|| | | W  d    W  d    S 1 s$w   Y  W d    d S 1 s4w   Y  d S N)r!   cursorexecutefetchoner"   r$   r   curr   r   r    r+      s   
"r+   List[Dict[str, Any]]c              	   C  sz   t  0}| }|| | t| W  d    W  d    S 1 s&w   Y  W d    d S 1 s6w   Y  d S r(   )r!   r)   r*   listfetchallr,   r   r   r    r0   &   s   

"r0   intc              	   C  st   t  -}| }|| | |jW  d    W  d    S 1 s#w   Y  W d    d S 1 s3w   Y  d S r(   )r!   r)   r*   	lastrowidr,   r   r   r    r*   -   s   
"r*    keydefaultc                 C  s.   t d| f}|r|dd urt|d S |S )Nz)SELECT value FROM settings WHERE `key`=%svalue)r+   getr#   )r4   r5   rowr   r   r    get_setting4   s   "r9   r6   
str | NoneNonec                 C  s   t d| |f d S )NzaINSERT INTO settings (`key`, `value`) VALUES (%s, %s) ON DUPLICATE KEY UPDATE value=VALUES(value)r*   )r4   r6   r   r   r    set_setting9      r=   telegram_idusernamedisplay_nameDict[str, Any]c                 C  sb   t d| f}|p	ddpd }|r#td|||d f t d|d fS td| ||f}t d|fS )Nz)SELECT * FROM models WHERE telegram_id=%sr3   @z:UPDATE models SET username=%s, display_name=%s WHERE id=%sidz SELECT * FROM models WHERE id=%sz_INSERT INTO models (telegram_id, username, display_name, status) VALUES (%s, %s, %s, 'pending'))r+   lstripr*   )r?   r@   rA   modelclean_usernamemodel_idr   r   r    ensure_model@   s   rI   c                   C  s   t dS )NzLSELECT * FROM credit_packages WHERE active=1 ORDER BY sort_order ASC, id ASC)r0   r   r   r   r    get_active_packagesR   s   rJ   rH   
package_idamountfloatcreditsproviderexternal_referencepayment_urlqr_codeprovider_payment_idraw_responsec
           
      C  s   t d| |||||||||	f
S )Nz
        INSERT INTO payments
        (model_id, package_id, amount, credits, provider, external_reference, payment_url, qr_code, provider_payment_id, raw_response)
        VALUES (%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)
        r<   )
rH   rK   rL   rN   rO   rP   rQ   rR   rS   rT   r   r   r    create_paymentX   s   rU   reasonboolc              	   C  s   t  X}| C}|d| f | }|rt|d dkr-	 W d    W d    dS |d| f |d| |f 	 W d    W d    dS 1 sNw   Y  W d    d S 1 s^w   Y  d S )Nz8SELECT credit_balance FROM models WHERE id=%s FOR UPDATEcredit_balancer   FzAUPDATE models SET credit_balance = credit_balance - 1 WHERE id=%szYINSERT INTO credit_transactions (model_id, type, amount, reason) VALUES (%s,'spend',1,%s)T)r!   r)   r*   r+   r1   )rH   rV   r   r-   r8   r   r   r    spend_one_credity   s$   
"rY   c                 C  s    t d| f}|rt|d S dS )Nz}SELECT COUNT(*) AS total FROM ads WHERE model_id=%s AND DATE(created_at)=CURDATE() AND status NOT IN ('rejected','cancelled')totalr   )r+   r1   )rH   r8   r   r   r    ads_today_count   s
   r[   rF   answersDict[str, str]media_file_id
media_type
final_textstatusc                 C  s   t  ]}| H}|d| d | d | d||||f |j}ddddd	}	| D ]\}
}|d
||
|	|
|
|f q+t|W  d    W  d    S 1 sSw   Y  W d    d S 1 scw   Y  d S )Nz
                INSERT INTO ads (model_id, telegram_user_id, username, final_text, media_file_id, media_type, status, credit_spent)
                VALUES (%s,%s,%s,%s,%s,%s,%s,1)
                rD   r?   r@   u   Faz vídeo chamada?zFaz sexting?u   Vende packs/prévias?u   Está disponível agora?)
video_callsextingpacks	availablezYINSERT INTO ad_answers (ad_id, question_key, question_label, answer) VALUES (%s,%s,%s,%s))r!   r)   r*   r7   r2   itemsr1   )rF   r\   r^   r_   r`   ra   r   r-   ad_idlabelsr4   answerr   r   r    save_ad   s:   
"rj   pendingchat_idtitle	chat_typec                 C  s   t d| |||f d S )Nz
        INSERT INTO target_groups (chat_id, title, type, status)
        VALUES (%s,%s,%s,%s)
        ON DUPLICATE KEY UPDATE title=VALUES(title), type=VALUES(type)
        r<   )rl   rm   rn   ra   r   r   r    upsert_group   s   
ro   cpf_cnpjc                 C  s   t d|| f d S )Nz)UPDATE models SET cpf_cnpj=%s WHERE id=%sr<   )rH   rp   r   r   r    update_model_cpf_cnpj   r>   rq   )r   )r"   r#   r$   r%   r&   r'   )r"   r#   r$   r%   r&   r.   )r"   r#   r$   r%   r&   r1   )r3   )r4   r#   r5   r#   r&   r#   )r4   r#   r6   r:   r&   r;   )r?   r1   r@   r:   rA   r:   r&   rB   )r&   r.   )r3   r3   r3   r3   )rH   r1   rK   r1   rL   rM   rN   r1   rO   r#   rP   r#   rQ   r#   rR   r#   rS   r#   rT   r#   r&   r1   )rH   r1   rV   r#   r&   rW   )rH   r1   r&   r1   )rF   rB   r\   r]   r^   r#   r_   r#   r`   r#   ra   r#   r&   r1   )rk   )
rl   r1   rm   r#   rn   r#   ra   r#   r&   r;   )rH   r1   rp   r#   r&   r;   )
__future__r   r   
contextlibr   typingr   r   r   r   configr   r	   r
   r   r   r!   r+   r0   r*   r9   r=   rI   rJ   rU   rY   r[   rj   ro   rq   r   r   r   r    <module>   s0    




!

,