package cmd import ( "fmt" "path/filepath" "strings" "github.com/spf13/cobra" "printer.backend/internal/model" "printer.backend/internal/svgtemplate" ) var ( sizeFlag float64 widthFlag float64 heightFlag float64 cornerRadiusFlag float64 bleedFlag float64 marginFlag float64 paddingFlag float64 outputFlag string ) var generateTemplateCmd = &cobra.Command{ Use: "template", Short: "Generate an SVG mask template with bleed and margins", RunE: func(cmd *cobra.Command, args []string) error { spec := model.ItemSpec{ SizeMM: sizeFlag, WidthMM: widthFlag, HeightMM: heightFlag, CornerRadiusMM: cornerRadiusFlag, BleedMM: bleedFlag, MarginMM: marginFlag, PaddingMM: paddingFlag, } if err := spec.Normalize(); err != nil { return err } data := svgtemplate.Build( spec.WidthMM, spec.HeightMM, spec.BleedMM, spec.MarginMM, spec.PaddingMM, spec.CornerRadiusMM, ) 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) } 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", 0, "Square product size in mm (sets width and height)") generateTemplateCmd.Flags().Float64VarP(&widthFlag, "width", "w", 0, "Product width in mm") generateTemplateCmd.Flags().Float64VarP(&heightFlag, "height", "H", 0, "Product height in mm") generateTemplateCmd.Flags().Float64VarP(&cornerRadiusFlag, "radius", "r", 0, "Corner radius 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") }