import type { DiffItem, SkippedRegion } from "@/lib/bump/planner";
import type { Region } from "@/lib/types";
import type { FileSyncDiffRow } from "@/lib/sync/file-sync/types";
import EnabledSwitchRow from "@/components/bump/EnabledSwitchRow";
import PreviewPanel from "@/components/bump/PreviewPanel";
import type { BumpMode } from "../model/file-sync";
import type { PRMeta } from "../model/pr-meta";

interface PreviewStepSectionProps {
  mode: BumpMode;
  sourceRegionId: string;
  prMeta: PRMeta | null;
  targetTag: string;
  selectedRegions: Region[];
  diffs: DiffItem[];
  skippedRegions?: SkippedRegion[];
  configSyncSummary?: {
    totalTargets: number;
    applicableTargets: number;
    failedTargets: number;
    totalChanges: number;
  };
  configSyncDiffs: FileSyncDiffRow[];
  configSyncFailures: Array<{
    regionId: string;
    error: { code: string; message: string; hint?: string };
  }>;
  imageTagCheckApplicable?: boolean;
  enableImageTagCheck: boolean;
  onEnableImageTagCheckChange: (value: boolean) => void;
  bumping: boolean;
  onBack: () => void;
  onConfirm: () => void;
}

export function PreviewStepSection({
  mode,
  sourceRegionId,
  prMeta,
  targetTag,
  selectedRegions,
  diffs,
  skippedRegions,
  configSyncSummary,
  configSyncDiffs,
  configSyncFailures,
  imageTagCheckApplicable,
  enableImageTagCheck,
  onEnableImageTagCheckChange,
  bumping,
  onBack,
  onConfirm,
}: PreviewStepSectionProps) {
  const showImageTagToggle =
    (mode === "image") ||
    (mode === "file-sync" && imageTagCheckApplicable);

  return (
    <section>
      {showImageTagToggle && (
        <div className="mb-4">
          <EnabledSwitchRow
            title="Enable image tag checks before execution"
            description="Verify the target image tag before applying changes."
            checked={enableImageTagCheck}
            onChange={onEnableImageTagCheckChange}
          />
        </div>
      )}
      <PreviewPanel
        mode={mode}
        sourceRegionId={sourceRegionId}
        prMeta={
          prMeta || {
            branchName: "",
            prTitle: "",
            prBody: "",
            scope: "",
          }
        }
        targetTag={targetTag}
        selectedRegions={selectedRegions}
        diffs={diffs}
        skippedRegions={skippedRegions}
        configSyncSummary={configSyncSummary}
        configSyncDiffs={configSyncDiffs}
        configSyncFailures={configSyncFailures}
        bumping={bumping}
        onBack={onBack}
        onConfirm={onConfirm}
      />
    </section>
  );
}
