o
    jj(                     @   s*   d dl m Z mZ d dlZG dd dZdS )    )datetime	timedeltaNc                   @   sN  e Zd ZdejfddZdedefddZdefdd	Z	d
d Z
deeef fddZd/dedefddZd/dededefddZdededefddZd/dededefddZdedefddZd/dededefd d!Zd/dededefd"d#Zdedefd$d%Zd/dededefd&d'Zd/ded(edefd)d*Zded+edefd,d-Zd.S )0ShopManagerconnc                 C   s   || _ | | _d S )N)r   cursorcur)selfr    r	   )/home/dore/onebot/Bot_Ero/core/db/shop.py__init__   s   zShopManager.__init__
product_iddefault_stockc                 C   s(   | j dt|t|f | j  d S )Nzd
            INSERT OR IGNORE INTO shop_stock (product_id, stock)
            VALUES (?, ?)
        )r   executestrintr   commit)r   r   r   r	   r	   r
   ensure_stock
   s   zShopManager.ensure_stockc                 C   s6   | j dt|f | j  }|d u rd S t|d S )NzG
            SELECT stock FROM shop_stock WHERE product_id = ?
        r   )r   r   r   fetchoner   )r   r   rowr	   r	   r
   stock   s
   
zShopManager.stockc                 C   s    | j d dd | j  D S )Nzb
            SELECT product_id, stock FROM shop_stock
            ORDER BY product_id ASC
        c                 S   s$   g | ]}t |d  t|d fqS )r      )r   r   ).0r   r	   r	   r
   
<listcomp>   s   $ z)ShopManager.all_stock.<locals>.<listcomp>)r   r   fetchall)r   r	   r	   r
   	all_stock   s   zShopManager.all_stockproduct_stocksc                 C   sp   | j d z$| j d | D ]\}}| j dt|t|f q| j  W d S  ty7   | j   w )NBEGIN IMMEDIATEzDELETE FROM shop_stockzr
                    INSERT INTO shop_stock (product_id, stock)
                    VALUES (?, ?)
                )	r   r   itemsr   r   r   r   	Exceptionrollback)r   r   pidr   r	   r	   r
   replace_shelf   s   
zShopManager.replace_shelfTuser_idr   c                 C   s*   | j dt|f |r| j  d S d S )Nz
            INSERT OR IGNORE INTO shop_user_buffs (
                user_id, checkin_luck_remaining, lottery_waiver_remaining
            )
            VALUES (?, 0, 0)
        )r   r   r   r   r   )r   r"   r   r	   r	   r
   ensure_buff-   s   zShopManager.ensure_buffuntil_date_strc                 C   s>   | j |dd | jdt|t|f |r| j  d S d S )NFr   zh
            UPDATE shop_user_buffs SET extra_draw_pack_until = ?
            WHERE user_id = ?
        )r#   r   r   r   r   r   r   )r   r"   r$   r   r	   r	   r
   set_draw_pack7      zShopManager.set_draw_pack	today_strreturnc                 C   sj   | j dt|f | j  }|r|d d u rdS t|d  }t|dkr-|d d }||kr3dS dS )NzY
            SELECT extra_draw_pack_until FROM shop_user_buffs WHERE user_id = ?
        r   
      )r   r   r   r   r   striplen)r   r"   r(   r   untilr	   r	   r
   
draw_bonus@   s   
zShopManager.draw_bonusdeltac                 C   sB   | j |dd t|}| jd|t|f |r| j  d S d S )NFr%   z
            UPDATE shop_user_buffs SET checkin_luck_remaining = checkin_luck_remaining + ?
            WHERE user_id = ?
        )r#   r   r   r   r   r   )r   r"   r0   r   dr	   r	   r
   add_luckN   s   
zShopManager.add_luckc                 C   >   | j dt|f | j  }|r|d d u rdS t|d S )NzZ
            SELECT checkin_luck_remaining FROM shop_user_buffs WHERE user_id = ?
        r   r   r   r   r   r   r"   r   r	   r	   r
   luck_remainingX   
   
 zShopManager.luck_remainingc                 C   2   | j dt|f | j jdk}|r| j  |S )Nz
            UPDATE shop_user_buffs SET checkin_luck_remaining = checkin_luck_remaining - 1
            WHERE user_id = ? AND checkin_luck_remaining > 0
        r   r   r   r   rowcountr   r   r   r"   r   okr	   r	   r
   pop_luck_      
zShopManager.pop_luckc                 C   s>   | j |dd | jdt|t|f |r| j  d S d S )NFr%   z
            UPDATE shop_user_buffs SET lottery_waiver_remaining = lottery_waiver_remaining + ?
            WHERE user_id = ?
        )r#   r   r   r   r   r   )r   r"   r0   r   r	   r	   r
   
add_waiveri   r'   zShopManager.add_waiverc                 C   r3   )Nz\
            SELECT lottery_waiver_remaining FROM shop_user_buffs WHERE user_id = ?
        r   r4   r5   r	   r	   r
   waiver_remainingr   r7   zShopManager.waiver_remainingc                 C   r8   )Nz
            UPDATE shop_user_buffs SET lottery_waiver_remaining = lottery_waiver_remaining - 1
            WHERE user_id = ? AND lottery_waiver_remaining > 0
        r   r9   r;   r	   r	   r
   
pop_waivery   r>   zShopManager.pop_waiver	stat_datec                 C   s0   | j dt|t|f |r| j  d S d S )Nz^
            DELETE FROM user_lottery_daily_stats WHERE user_id = ? AND stat_date = ?
        )r   r   r   r   r   r   )r   r"   rB   r   r	   r	   r
   clear_draw_count   s   zShopManager.clear_draw_countcostc              
   C   s  t |}t |}t|}| jd z| jd|f | jd|f | j }|d u s2|d d u r4dnt|d }||k rF| j  W dS | jd|f | j }|d u r_| j  W dS t|d }	|	dkrq| j  W dS |	dkr| jd	|f | jjdkr| j  W dS n|	d
kr| j  W dS | jd|||f | jjdkr| j  W dS z|  W n  ty }
 z| j  dt |
pdfW  Y d }
~
W S d }
~
ww | j	  W dS  ty }
 z| j  dt |
pdfW  Y d }
~
S d }
~
ww )Nr   zAINSERT OR IGNORE INTO user_assets (user_id, points) VALUES (?, 0)z0SELECT points FROM user_assets WHERE user_id = ?r   )Fu   积分不足z1SELECT stock FROM shop_stock WHERE product_id = ?)Fu   商品不存在)Fu   库存不足zJUPDATE shop_stock SET stock = stock - 1 WHERE product_id = ? AND stock > 0)Fu   库存数据异常zLUPDATE user_assets SET points = points - ? WHERE user_id = ? AND points >= ?Fu   发放失败)Tr<   u   兑换失败)
r   r   r   r   r   r   r   r:   r   r   )r   r   r"   rD   grant_fn	user_id_sr   pointssrowr   er	   r	   r
   redeem   sr   
$










zShopManager.redeemN)T)__name__
__module____qualname__sqlite3
Connectionr   r   r   r   r   r   dictr!   boolr#   r&   r/   r2   r6   r=   r?   r@   rA   rC   tuplerK   r	   r	   r	   r
   r      s"    
	

	
r   )r   r   rO   r   r	   r	   r	   r
   <module>   s    