
    j                        d dl mZ d dlmZ d dlmZ d dlmZ d dlm	Z	m
Z
 d dlmZ d dlmZ d dlmZ d d	lmZ d d
lmZ d dlmZ d dlmZ d dlmZ d ZddZddZddZddZy)    )annotations)Decimal)Path)create_crypto_asset)calculate_crypto_holdingscreate_initial_holding_snapshot)create_wallet)import_cash_balances_csv)import_crypto_holdings_csv)import_crypto_transactions_csv)import_crypto_wallets_csv)import_watchlist_csv)connect_memory)apply_migrationsc                     t               } t        |        | j                  d       | j                  d       | j                          | S )NzINSERT INTO platforms(platform_id,name,platform_type,default_currency,created_at) VALUES('p1','Synthetic Broker','Bank/Broker','CHF','now')zINSERT INTO accounts(account_id,platform_id,account_name,account_type,currency,created_at) VALUES('a1','p1','Synthetic Cash','cash','CHF','now'))r   r   executecommit)cs    )tests/unit/test_csv_importers_extended.py
setup_connr      sE    A(+II  \  ]II  a  bHHJq    c                6    | |z  }|j                  |d       |S )Nzutf-8)encoding)
write_text)tmp_pathnametextps       r   	write_csvr      s    4AdW=axr   c                   t               }t        | dd      }t        ||d      j                  dk(  sJ t        ||d      }|j                  dk(  sJ t        ||d      j
                  dk(  sJ t        | dd	      }t        ||d      }|j                  dk(  sJ t        |      }|j                  d
      j                         d   }|j                  d      j                         d   }|j                  ||f   j                  t        d      k(  sJ |j                  d      j                         }|d   dk(  r|d   dk(  sJ |d   dk(  r|d   dk(  sJ y )Nzwallets.csvzGwallet_name,wallet_type,notes
Synthetic Cold,Hardware Wallet,synthetic
Fr   
dry_run_okT   zholdings.csvzwallet_name,coin_name,symbol,coingecko_id,quantity,verification_status,last_verified_at,legacy_snapshot_value_chf
Synthetic Cold,Synthetic Bitcoin,BTC,bitcoin,0.00000001,verified,2026-01-01T00:00:00Z,999.99
z5SELECT asset_id FROM crypto_assets WHERE symbol='BTC'asset_idzGSELECT wallet_id FROM crypto_wallets WHERE wallet_name='Synthetic Cold'	wallet_id
0.00000001ztSELECT quantity, typeof(quantity), legacy_snapshot_value_chf, typeof(legacy_snapshot_value_chf) FROM crypto_holdingsquantityztypeof(quantity)r   legacy_snapshot_value_chfz999.99z!typeof(legacy_snapshot_value_chf))r   r   r   statusrows_newrows_existingr   r   r   fetchonewallet_holdingsr'   r   )	r   r   walletsresholdingshaidwidrows	            r   Ktest_crypto_wallet_and_holding_import_dry_run_commit_existing_and_precisionr5      s   lAh}-xyG$Qwe<CC|SSS!!G48CQRAR:RAR$Qwd;IIQNNNx  0C  DH"1XT:C3<<STCT<TCT"A			IJSSUV`aC			[\eeghstCc#Y'00GL4IIII			  I  	J  	S  	S  	UCz?l*s3E/F&/PPP*+x7C@c<dhn<nnn<nr   c                P   t               }t        |dd      }t        |dd      }t        |ddd	      }t        |||t	        d
      dd       t        | dd      }t        ||d      }|j                  dk(  sJ t        |      }|j                  ||f   j                  t	        d      k(  sJ |j                  ||f   j                  t	        d
      k(  sJ |j                  d      j                         d   dk(  sJ |j                  d      j                         d   dk(  sJ y )NzSynthetic AzHardware Wallet)wallet_namewallet_typezSynthetic BzSoftware WalletzSynthetic BitcoinBTCbitcoin)	coin_namesymbolcoingecko_idz
0.00000003verified	synthetic)r$   r%   r'   verification_statusnotezcrypto_tx.csva\  transaction_type,asset_symbol,quantity,from_wallet_name,to_wallet_name,account_name,gross_amount_original,currency_original,fee_quantity,fee_original,fee_currency,fx_rate_to_chf,notes
transfer,BTC,0.00000001,Synthetic A,Synthetic B,,,,0.00000001,,,,synthetic transfer
buy,BTC,0.00000002,,Synthetic B,Synthetic Cash,10,CHF,,0.50,CHF,1,synthetic buy
Tr!   	committedr&   zASELECT COUNT(*) AS c FROM transactions WHERE source_type='crypto'r      zTSELECT COUNT(*) AS c FROM audit_log WHERE action IN ('crypto_transfer','crypto_buy'))r   r	   r   r   r   r   r   r)   r   r-   r'   r   r,   )r   r   w1w2r2   csvr/   r1   s           r   Stest_crypto_transactions_import_transfer_and_buy_create_audit_and_no_float_roundingrG   -   ss   lA}Q=M^_Bdqrs  AN  [l  emac  sF  GH  Sf  ns  AJ  sK  or#AsRQ]I^s}  DO  P(?  ,M  	NC&qD9C::$$$"AbX&//7<3HHHHbX&//7<3HHHH99XYbbdehimnnnn99kluuwx{|  AB  B  B  Br   c                   t               }t        | dd      }t        ||d      j                  dk(  sJ |j	                  dd      j                         d   d	k(  sJ t        | d
d      }t        ||d      j                  dk(  sJ |j	                  d      j                         }|d   dk(  sJ t        |d         t        d      k(  sJ y )Nz	watch.csvzname,asset_class,reason,status,target_entry_price,target_entry_currency,investment_case,bear_case
Synthetic Idea,Crypto,synthetic reason,active,123.45,CHF,case,bear
Tr!   r#   z)SELECT reason FROM watchlist WHERE name=?)zSynthetic Ideareasonzsynthetic reasonzcash.csvzaccount_name,balance_date,currency,amount_original,fx_rate_to_chf,notes
Synthetic Cash,2026-01-01,CHF,1000,1,synthetic cash snapshot
zmSELECT transaction_type, net_amount_original FROM transactions WHERE transaction_type='initial_cash_snapshot'transaction_typeinitial_cash_snapshotnet_amount_original1000)r   r   r   r*   r   r,   r
   r   )r   r   watchcashr4   s        r   )test_watchlist_and_cash_balance_importersrP   :   s    lA
H[  *S  TE%t4==BBB99@ATU^^`aij  oA  A  A  A	8J  (q  
rD#Ad$7@@AEEE			  B  	C  	L  	L  	NC!"&====3,-.'&/AAAr   N)r   r   r   strr   rQ   returnr   )r   r   rR   None) 
__future__r   decimalr   pathlibr   jarvis_finance.crypto.assetsr   jarvis_finance.crypto.holdingsr   r   jarvis_finance.crypto.walletsr	   -jarvis_finance.imports.cash_balances_importerr
   /jarvis_finance.imports.crypto_holdings_importerr   3jarvis_finance.imports.crypto_transactions_importerr   .jarvis_finance.imports.crypto_wallets_importerr   )jarvis_finance.imports.watchlist_importerr   jarvis_finance.storage.databaser   !jarvis_finance.storage.migrationsr   r   r   r5   rG   rP    r   r   <module>rb      sI    "   < e 7 R V ^ T J : >Ho"
B	Br   