"""Rich rendering for repair proposals and transaction output.""" from __future__ import annotations from rich.console import Console from rich.panel import Panel from rich.table import Table from dataforge.repairers.base import ProposedFix def render_repair_diff( fixes: list[ProposedFix], console: Console | None = None, *, file_path: str = "", ) -> None: """Render a rich table describing proposed repairs.""" target_console = console or Console() title = "Proposed Repairs" if file_path: title = f"{title} | {file_path}" target_console.print(Panel(title, style="bold cyan", expand=True)) if not fixes: target_console.print( Panel("[yellow]No fixes proposed.[/yellow]", title="Result", style="yellow") ) return table = Table(title="Repair Diff", show_lines=True, header_style="bold magenta") table.add_column("Row", justify="right", width=5) table.add_column("Column", style="cyan", min_width=12) table.add_column("Old", min_width=12) table.add_column("New", min_width=12) table.add_column("Detector", min_width=14) table.add_column("Confidence", justify="right", min_width=10) table.add_column("Provenance", min_width=13) for proposed in fixes: table.add_row( str(proposed.fix.row), proposed.fix.column, proposed.fix.old_value, proposed.fix.new_value, proposed.fix.detector_id, f"{proposed.confidence:.0%}", proposed.provenance, ) target_console.print(table)