1use crate::config::{set_fee_treatment, set_pre2025_method as config_set_pre2025_method};
4use crate::render::write_csv_exports;
5use crate::{CliConfig, CliError, Session};
6use btctax_adapters::BundledTaxTables;
7use btctax_core::{compute_se_tax, FeeTreatment, LotMethod, TaxTables};
8use btctax_store::Passphrase;
9use std::path::{Path, PathBuf};
10
11pub fn show_config(vault_path: &Path, pp: &Passphrase) -> Result<CliConfig, CliError> {
12 Session::open(vault_path, pp)?.config()
13}
14
15pub fn set_config(
17 vault_path: &Path,
18 pp: &Passphrase,
19 fee_treatment: Option<FeeTreatment>,
20) -> Result<CliConfig, CliError> {
21 let mut session = Session::open(vault_path, pp)?;
22 if let Some(t) = fee_treatment {
23 set_fee_treatment(session.conn(), t)?;
24 session.save()?;
25 }
26 session.config()
27}
28
29pub fn set_pre2025_method(
31 vault_path: &Path,
32 pp: &Passphrase,
33 m: LotMethod,
34 attested: bool,
35) -> Result<CliConfig, CliError> {
36 let mut session = Session::open(vault_path, pp)?;
37 config_set_pre2025_method(session.conn(), m, attested)?;
38 session.save()?;
39 session.config()
40}
41
42pub fn export_snapshot(
46 vault_path: &Path,
47 pp: &Passphrase,
48 out_dir: &Path,
49 tax_year: Option<i32>,
50) -> Result<PathBuf, CliError> {
51 let session = Session::open(vault_path, pp)?;
52 let sqlite = session.vault().export_snapshot(out_dir)?; let (state, _cfg) = session.project()?;
54 let se_result = match tax_year {
59 Some(y) => {
60 let tables = BundledTaxTables::load();
61 session.tax_profile(y)?.and_then(|p| {
62 tables.table_for(y).and_then(|t| {
63 compute_se_tax(
64 &state,
65 y,
66 p.filing_status,
67 t,
68 p.w2_ss_wages,
69 p.w2_medicare_wages,
70 p.schedule_c_expenses,
71 )
72 })
73 })
74 }
75 None => None,
76 };
77 let donation_details = session.donation_details()?;
78 write_csv_exports(
79 out_dir,
80 &state,
81 tax_year,
82 se_result.as_ref(),
83 &donation_details,
84 )?;
85 Ok(sqlite)
86}
87
88pub fn backup_key(vault_path: &Path, pp: &Passphrase, out_path: &Path) -> Result<(), CliError> {
90 Session::open(vault_path, pp)?
91 .vault()
92 .backup_key(out_path)?;
93 Ok(())
94}