o
    ·ôjjÍ  ã                   @   s&   d dl m Z  d dlZG dd„ dƒZdS )é    )ÚdatetimeNc                   @   sd   e Zd Zdejfdd„Zdd„ Zdd„ Zdd	„ Zd
d„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ ZdS )ÚQuestManagerÚconnc                 C   s   || _ | ¡ | _d S )N)r   ÚcursorÚcur)Úselfr   © r   ú*/home/dore/onebot/Bot_Ero/core/db/quest.pyÚ__init__   s   zQuestManager.__init__c                 C   s4   | j  dt|ƒt|ƒt|ƒt|ƒf¡ | j ¡  d S )NzØ
            INSERT INTO quest_progress (user_id, quest_id, week_key, progress)
            VALUES (?, ?, ?, ?)
            ON CONFLICT(user_id, quest_id, week_key) DO UPDATE SET progress = excluded.progress
        )r   ÚexecuteÚstrÚintr   Úcommit)r   Úuser_idÚquest_idÚweek_keyÚprogressr   r   r	   Úupsert_progress
   s   üzQuestManager.upsert_progressc                 C   sJ   t  ¡  d¡}| j d|t|ƒt|ƒt|ƒf¡ | jjdk}| j 	¡  |S )Nú%Y-%m-%d %H:%M:%Sz¼
            UPDATE quest_progress
            SET completed = 1, claimed_at = ?
            WHERE user_id = ? AND quest_id = ? AND week_key = ?
            AND claimed_at IS NULL
        r   )
r   ÚnowÚstrftimer   r   r   r   Úrowcountr   r   )r   r   r   r   r   Úokr   r   r	   Úclaim_reward   s   û
zQuestManager.claim_rewardc                 C   s:   | j  dt|ƒt|ƒt|ƒf¡ | j jdk}| j ¡  |S )NzÃ
            UPDATE quest_progress
            SET completed = 0, claimed_at = NULL
            WHERE user_id = ? AND quest_id = ? AND week_key = ?
            AND claimed_at IS NOT NULL
        r   )r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r	   Úrevoke_reward   s   û
zQuestManager.revoke_rewardc                 C   s2   | j  dt|ƒt|ƒf¡ | j  ¡ }dd„ |D ƒS )Nz‰
            SELECT quest_id, progress, completed
            FROM quest_progress
            WHERE user_id = ? AND week_key = ?
        c                 S   s$   i | ]}|d  |d |d dœ“qS )r   é   é   )r   Ú	completedr   )Ú.0Úrowr   r   r	   Ú
<dictcomp>0   s   $ z)QuestManager.progress.<locals>.<dictcomp>)r   r   r   Úfetchall)r   r   r   Úrowsr   r   r	   r   )   s
   ü
zQuestManager.progressc                 C   ó"   | j  dt|ƒf¡ | j ¡  d S )NzO
            DELETE FROM quest_progress
            WHERE week_key < ?
        ©r   r   r   r   r   )r   Úcurrent_week_keyr   r   r	   Úcleanup_old2   s   ýzQuestManager.cleanup_oldc                 C   r#   )NzÈ
            INSERT INTO quest_completion_stats (user_id, total_completions)
            VALUES (?, 1)
            ON CONFLICT(user_id) DO UPDATE SET total_completions = total_completions + 1
        r$   )r   r   r   r   r	   Úincrement_completion9   s   üz!QuestManager.increment_completionc                 C   ó6   | j  dt|ƒf¡ | j  ¡ }|d u rdS t|d ƒS )Nzt
            SELECT total_completions
            FROM quest_completion_stats
            WHERE user_id = ?
        r   ©r   r   r   Úfetchoner   ©r   r   r   r   r   r	   Ú
completionA   s
   ü
zQuestManager.completionc                 C   sD   t  ¡  d¡}| j dt|ƒt|ƒ|f¡ | jjdk}| j ¡  |S )Nr   z|
            INSERT OR IGNORE INTO quest_weekly_clears (user_id, week_key, cleared_at)
            VALUES (?, ?, ?)
        r   )	r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r	   Úrecord_clearJ   s   ý
zQuestManager.record_clearc                 C   r(   )NzP
            SELECT COUNT(*) FROM quest_weekly_clears WHERE user_id = ?
        r   r)   r+   r   r   r	   Úclear_countT   s
   þ
zQuestManager.clear_countN)Ú__name__Ú
__module__Ú__qualname__Úsqlite3Ú
Connectionr
   r   r   r   r   r&   r'   r,   r-   r.   r   r   r   r	   r      s    		
r   )r   r2   r   r   r   r   r	   Ú<module>   s    