package cli import ( "flag" "os" "slices" "gogs.inhome.blapointe.com/ana-ledger/src/ledger" ) func Main() { var config Config fs := flag.NewFlagSet(os.Args[0], flag.ContinueOnError) fs.Var(&config.Files, "f", "paths to files") fs.StringVar(&config.Query.Period, "period", "", "period") fs.StringVar(&config.Query.Sort, "S", "", "sort ie date") fs.BoolVar(&config.Query.NoRounding, "no-rounding", false, "no rounding") fs.IntVar(&config.Query.Depth, "depth", 0, "depth grouping") if err := fs.Parse(os.Args[1:]); err != nil { panic(err) } files := config.Files.Strings() if len(files) == 0 { panic("must specify at least one file") } ledgerFiles, err := ledger.NewFiles(files[0], files[1:]...) if err != nil { panic(err) } positional := fs.Args() if len(positional) == 0 || len(positional[0]) < 3 { panic("positional arguments required, ie bal|reg PATTERN MATCHING") } cmd := positional[0] likes := []ledger.Like{} for _, query := range positional[1:] { panic(query) } deltas, err := ledgerFiles.Deltas(likes...) if err != nil { panic(err) } if depth := config.Query.Depth; depth > 0 { panic(depth) } switch cmd[:3] { case "bal": balances := deltas.Balances() keys := []string{} for k := range balances { keys = append(keys, k) } slices.Sort(keys) depth := 0 previous := "" for i := range keys { key := keys[i] if isSameDepth := func() bool { return false }(); isSameDepth { } else if isDeeper := func() bool { return false }(); isDeeper { } else if lessDeep := func() int { return 0 }(); true { } previous = key } panic(balances.Debug()) case "reg": // register := deltas.Register() default: panic("unknown command " + positional[0]) } }