export interface IContentCheckJob { job_id: string; state: 'pending' | 'processing' | 'completed' | 'failed'; progress: number; total_products: number; processed_products: number; overall_score: number; critical_count: number; warning_count: number; ok_count: number; language_detected: string; error: string | null; csv_url: string | null; pdf_url: string | null; created_at: string | null; updated_at: string | null; } export interface IContentCheckProductRow { sku: string; product_name: string; detected_product_type: string; title_score: number; description_score: number; title_issues: string[]; description_issues: string[]; severity: 'critical' | 'warning' | 'ok'; created_at: string | null; /** Content-generator job id kicked off by the "Fix with AI" CTA on this * row. Empty when the merchant has not asked for a fix yet. */ fix_content_gen_job_id: string; } export interface IContentCheckProductList { products: IContentCheckProductRow[]; next_cursor: string | null; } export type ContentCheckSeverity = 'critical' | 'warning' | 'ok'; /** One catalog product returned by the scan-picker search endpoint. */ export interface IProductSearchItem { sku: string; product_name: string; image_url: string; price: number; currency: string; in_stock: boolean; } /** Result of dispatching a scan on merchant-picked SKUs. */ export interface IScanSelectedResult { job: IContentCheckJob | null; /** Backend error detail (e.g. insufficient credits); null on success. */ error: string | null; }