import api from './client' import type { OrderDetail } from './orders' export interface ExcelPreviewRow { row_index: number pim_id: string | null produkt_baureihe: string | null gewaehltes_produkt: string | null product_exists: boolean product_id: string | null medias_rendering: boolean | null category_key: string | null has_step: boolean is_duplicate: boolean duplicate_of_row: number | null } export interface ExcelPreviewResult { excel_path: string filename: string category_key: string | null row_count: number existing_product_count: number new_product_count: number no_pim_id_count: number has_step_count: number no_step_count: number duplicate_count: number warnings: string[] rows: ExcelPreviewRow[] column_headers: string[] template_name: string | null validation_id?: string | null } export interface ParsedComponent { part_name: string | null material: string | null component_type: string | null column_index: number } export interface ParsedRow { row_index: number ebene1: string | null ebene2: string | null baureihe: string | null pim_id: string | null produkt_baureihe: string | null gewaehltes_produkt: string | null name_cad_modell: string | null gewuenschte_bildnummer: string | null lagertyp: string | null medias_rendering: boolean | null components: ParsedComponent[] } export interface ParsedExcelResponse { filename: string excel_path?: string category_key: string | null template_name: string | null row_count: number column_headers: string[] rows: ParsedRow[] warnings: string[] } export interface OutputTypeSelection { row_index: number output_type_ids: string[] } export interface ExcelFinalizeRequest { excel_path: string included_row_indices: number[] output_type_selections: OutputTypeSelection[] notes?: string | null template_id?: string | null } export async function uploadExcel(file: File): Promise { const form = new FormData() form.append('file', file) const res = await api.post('/uploads/excel', form, { headers: { 'Content-Type': 'multipart/form-data' }, }) return res.data } export async function finalizeExcelImport(data: ExcelFinalizeRequest): Promise { const res = await api.post('/uploads/excel/finalize', data) return res.data } export async function uploadStep(file: File) { const form = new FormData() form.append('file', file) const res = await api.post('/uploads/step', form, { headers: { 'Content-Type': 'multipart/form-data' }, }) return res.data } // ── Import Validation ───────────────────────────────────────────────────── export interface ValidationIssue { type: 'missing_material' | 'material_suggestion' | 'no_step' | 'duplicate' field: string | null value: string | null suggestion: string | null message: string } export interface ValidationRow { row_index: number product_id: string | null pim_id: string | null produkt_baureihe: string | null issues: ValidationIssue[] status: 'ok' | 'warning' | 'error' } export interface ImportValidation { id: string tenant_id: string | null excel_path: string status: 'pending' | 'running' | 'completed' | 'failed' summary: { total: number ok: number warnings: number errors: number missing_materials: number no_step: number duplicates: number } | null rows: ValidationRow[] | null created_at: string completed_at: string | null } export async function getImportValidation(id: string): Promise { const res = await api.get(`/uploads/validations/${id}`) return res.data }