Files
renamer/internal/ai/preview.go
2025-11-05 16:06:09 +08:00

56 lines
1.3 KiB
Go

package ai
import (
"fmt"
"io"
"github.com/rogeecn/renamer/internal/ai/flow"
"github.com/rogeecn/renamer/internal/output"
)
// PrintPreview renders suggestions in a tabular format alongside validation results.
func PrintPreview(w io.Writer, suggestions []flow.Suggestion, validation ValidationResult) error {
table := output.NewAIPlanTable()
if err := table.Begin(w); err != nil {
return err
}
for idx, suggestion := range suggestions {
if err := table.WriteRow(output.AIPlanRow{
Sequence: fmt.Sprintf("%02d", idx+1),
Original: suggestion.Original,
Proposed: suggestion.Suggested,
Sanitized: flowToKey(suggestion.Suggested),
}); err != nil {
return err
}
}
if err := table.End(w); err != nil {
return err
}
for _, warn := range validation.Warnings {
if _, err := fmt.Fprintf(w, "Warning: %s\n", warn); err != nil {
return err
}
}
if len(validation.Conflicts) > 0 {
if _, err := fmt.Fprintln(w, "Conflicts detected:"); err != nil {
return err
}
for _, conflict := range validation.Conflicts {
if _, err := fmt.Fprintf(w, " - %s -> %s (%s)\n", conflict.Original, conflict.Suggested, conflict.Reason); err != nil {
return err
}
}
}
if _, err := fmt.Fprintf(w, "Previewed %d suggestion(s)\n", len(suggestions)); err != nil {
return err
}
return nil
}