from .crud import ( create_castle_settings, create_user_wallet_settings, get_castle_settings, get_or_create_user_account, get_user_wallet_settings, update_castle_settings, update_user_wallet_settings, ) from .models import AccountType, CastleSettings, UserWalletSettings async def get_settings(user_id: str) -> CastleSettings: settings = await get_castle_settings(user_id) if not settings: settings = await create_castle_settings(user_id, CastleSettings()) return settings async def update_settings(user_id: str, data: CastleSettings) -> CastleSettings: settings = await get_castle_settings(user_id) if not settings: settings = await create_castle_settings(user_id, data) else: settings = await update_castle_settings(user_id, data) return settings async def get_user_wallet(user_id: str) -> UserWalletSettings: settings = await get_user_wallet_settings(user_id) if not settings: settings = await create_user_wallet_settings(user_id, UserWalletSettings()) return settings async def update_user_wallet( user_id: str, data: UserWalletSettings ) -> UserWalletSettings: from loguru import logger logger.info(f"[WALLET UPDATE] Starting update_user_wallet for user {user_id[:8]}") settings = await get_user_wallet_settings(user_id) if not settings: logger.info(f"[WALLET UPDATE] Creating new wallet settings for user {user_id[:8]}") settings = await create_user_wallet_settings(user_id, data) else: logger.info(f"[WALLET UPDATE] Updating existing wallet settings for user {user_id[:8]}") settings = await update_user_wallet_settings(user_id, data) # Proactively create core user accounts when wallet is configured # This ensures all users have a consistent account structure from the start logger.info(f"[WALLET UPDATE] Creating LIABILITY account for user {user_id[:8]}") await get_or_create_user_account( user_id, AccountType.LIABILITY, "Accounts Payable" ) logger.info(f"[WALLET UPDATE] Creating ASSET account for user {user_id[:8]}") await get_or_create_user_account( user_id, AccountType.ASSET, "Accounts Receivable" ) logger.info(f"[WALLET UPDATE] Completed update_user_wallet for user {user_id[:8]}") return settings