package cmd import ( "fmt" "path/filepath" "strings" "github.com/spf13/cobra" "printer.backend/internal/model" "printer.backend/internal/svgtemplate" ) var ( sizeFlag float64 bleedFlag float64 marginFlag float64 paddingFlag float64 outputFlag string ) var generateTemplateCmd = &cobra.Command{ Use: "template", Short: "Generate a square SVG mask template with bleed and margins", RunE: func(cmd *cobra.Command, args []string) error { data := svgtemplate.Build(sizeFlag, bleedFlag, marginFlag, paddingFlag) base := filepath.Base(outputFlag) outPath := filepath.Join(svgtemplate.OutputDir, base) if err := svgtemplate.WriteFile(outputFlag, data); err != nil { return fmt.Errorf("write svg: %w", err) } spec := model.ItemSpec{ SizeMM: sizeFlag, BleedMM: bleedFlag, MarginMM: marginFlag, PaddingMM: paddingFlag, } name := strings.TrimSuffix(base, filepath.Ext(base)) item, err := svgtemplate.WriteMeta(base, spec, name) if err != nil { return fmt.Errorf("write meta: %w", err) } metaPath := filepath.Join(svgtemplate.OutputDir, model.MetaFilename(base)) cmd.Printf("Template erfolgreich generiert: %s\n", outPath) cmd.Printf("Item-Metadaten gespeichert: %s (Item %s)\n", metaPath, item.ID) return nil }, } func init() { rootCmd.AddCommand(generateTemplateCmd) generateTemplateCmd.Flags().Float64VarP(&sizeFlag, "size", "s", 100.0, "Size of the final square product in mm") generateTemplateCmd.Flags().Float64VarP(&bleedFlag, "bleed", "b", 2.0, "Bleed (Überdruck) in mm") generateTemplateCmd.Flags().Float64VarP(&marginFlag, "margin", "m", 5.0, "Margin to the outer elements in mm") generateTemplateCmd.Flags().Float64VarP(&paddingFlag, "padding", "p", 3.0, "Inner padding (safety margin) in mm") generateTemplateCmd.Flags().StringVarP(&outputFlag, "output", "o", "mask_template.svg", "Output file path") }