from typing import List, Optional, Union # from lnbits.db import open_ext_db from . import db from .models import Copilots from lnbits.helpers import urlsafe_short_hash from quart import jsonify ###############COPILOTS########################## async def create_copilot( title: str, user: str, lnurl_toggle: str, wallet: Optional[str] = None, animation1: Optional[str] = None, animation2: Optional[str] = None, animation3: Optional[str] = None, animation1threshold: Optional[int] = None, animation2threshold: Optional[int] = None, animation3threshold: Optional[int] = None, animation1webhook: Optional[str] = None, animation2webhook: Optional[str] = None, animation3webhook: Optional[str] = None, lnurl_title: Optional[str] = None, show_message: Optional[int] = None, show_ack: Optional[int] = None, show_price: Optional[int] = None, amount_made: Optional[int] = None, ) -> Copilots: copilot_id = urlsafe_short_hash() await db.execute( """ INSERT INTO copilots ( id, user, lnurl_toggle, wallet, title, animation1, animation2, animation3, animation1threshold, animation2threshold, animation3threshold, animation1webhook, animation2webhook, animation3webhook, lnurl_title, show_message, show_ack, show_price, lnurl_title, amount_made ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) """, ( copilot_id, user, lnurl_toggle, wallet, title, animation1, animation2, animation3, animation1threshold, animation2threshold, animation3threshold, animation1webhook, animation2webhook, animation3webhook, lnurl_title, show_message, show_ack, show_price, lnurl_title, 0, ), ) return await get_copilot(copilot_id) async def update_copilot(copilot_id: str, **kwargs) -> Optional[Copilots]: q = ", ".join([f"{field[0]} = ?" for field in kwargs.items()]) await db.execute( f"UPDATE copilots SET {q} WHERE id = ?", (*kwargs.values(), copilot_id) ) row = await db.fetchone("SELECT * FROM copilots WHERE id = ?", (copilot_id,)) return Copilots.from_row(row) if row else None async def get_copilot(copilot_id: str) -> Copilots: row = await db.fetchone("SELECT * FROM copilots WHERE id = ?", (copilot_id,)) return Copilots.from_row(row) if row else None async def get_copilots(user: str) -> List[Copilots]: rows = await db.fetchall("SELECT * FROM copilots WHERE user = ?", (user,)) return [Copilots.from_row(row) for row in rows] async def delete_copilot(copilot_id: str) -> None: await db.execute("DELETE FROM copilots WHERE id = ?", (copilot_id,))