/* eslint-disable @typescript-eslint/no-explicit-any */ "use client"; import { useState } from 'react'; import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@/components/ui/card'; import { Button } from '@/components/ui/button'; import { Upload, FileText, Database, BarChart3, CheckCircle, Loader2 } from 'lucide-react'; import { UploadForm } from '@/app/components/uploadForm'; import { createCintasImportRecord, processCintasImportData } from '@/app/actions/cintas-workflow'; interface FileData { id: string; filename: string; mimetype: string; size: number; createdAt: string; updatedAt: string; } interface CintasSummary { id: number; week: string; trrTotal: number; fourWkAverages: number; trrPlus4Wk: number; powerAdds: number; weekId: number; } export default function CintasCalendarSummaryPage() { const [currentStep, setCurrentStep] = useState(1); const [uploadedFile, setUploadedFile] = useState(null); const [isProcessing, setIsProcessing] = useState(false); const [importRecord, setImportRecord] = useState(null); const [summaryData, setSummaryData] = useState([]); const [error, setError] = useState(null); const handleFileUploaded = (file: FileData) => { setUploadedFile(file); setCurrentStep(2); setError(null); }; const handleCreateImportRecord = async () => { if (!uploadedFile) return; setIsProcessing(true); setError(null); try { const result = await createCintasImportRecord(uploadedFile.id, uploadedFile.filename); if (result.success) { setImportRecord(result.data); setCurrentStep(3); } else { setError(result.error || 'Failed to create import record'); } } catch (err) { setError(err instanceof Error ? err.message : 'Unknown error occurred'); } finally { setIsProcessing(false); } }; const handleProcessImportData = async () => { if (!importRecord) return; setIsProcessing(true); setError(null); try { const result = await processCintasImportData(importRecord.id); if (result.success) { setCurrentStep(4); } else { setError(result.error || 'Failed to process import data'); } } catch (err) { setError(err instanceof Error ? err.message : 'Unknown error occurred'); } finally { setIsProcessing(false); } }; const handleGenerateSummary = async () => { if (!importRecord) return; setIsProcessing(true); setError(null); try { // This would typically call an API endpoint to run the stored procedure // For now, we'll simulate the summary generation const response = await fetch(`/api/imports/${importRecord.id}/summary`); if (response.ok) { const data = await response.json(); setSummaryData(data); } else { throw new Error('Failed to generate summary'); } } catch (err) { setError(err instanceof Error ? err.message : 'Failed to generate summary'); } finally { setIsProcessing(false); } }; const steps = [ { id: 1, title: 'Upload Excel File', description: 'Upload the Cintas Install Calendar Excel file to blob storage', icon: Upload, status: currentStep >= 1 ? (uploadedFile ? 'completed' : 'pending') : 'pending', }, { id: 2, title: 'Create Import Record', description: 'Create an import record with Cintas Install Calendar layout configuration', icon: FileText, status: currentStep >= 2 ? (importRecord ? 'completed' : 'pending') : 'disabled', }, { id: 3, title: 'Import Data', description: 'Read the Excel file and import data into PostgreSQL database', icon: Database, status: currentStep > 3 ? 'completed' : (currentStep === 3 ? 'pending' : 'disabled'), }, { id: 4, title: 'Generate Summary', description: 'Run summary calculations and display results', icon: BarChart3, status: currentStep >= 4 ? (summaryData.length > 0 ? 'completed' : 'pending') : 'disabled', }, ]; const getStepStatusColor = (status: string) => { switch (status) { case 'completed': return 'text-green-600 bg-green-50 border-green-200'; case 'pending': return 'text-blue-600 bg-blue-50 border-blue-200'; case 'disabled': return 'text-gray-400 bg-gray-50 border-gray-200'; default: return 'text-gray-600 bg-gray-50 border-gray-200'; } }; return (

Cintas Install Calendar Summary

Follow the workflow steps to upload and process the installation calendar data

{error && (

{error}

)} {/* Workflow Steps */}
{steps.map((step) => { const Icon = step.icon; return (
Step {step.id}: {step.title}
{step.description}
); })}
{/* Step Content */}
{currentStep === 1 && ( Step 1: Upload Excel File Upload your Cintas Install Calendar Excel file to begin processing
{uploadedFile && (

File uploaded successfully!

{uploadedFile.filename} ({(uploadedFile.size / 1024 / 1024).toFixed(2)} MB)

)}
)} {currentStep === 2 && ( Step 2: Create Import Record Creating import record with Cintas Install Calendar layout configuration

File: {uploadedFile?.filename}

)} {currentStep === 3 && ( Step 3: Import Data Processing Excel file and importing data into database

Import ID: {importRecord?.id}

)} {currentStep === 4 && ( Step 4: Generate Summary Running summary calculations and displaying results
{summaryData.length > 0 && (

Summary Results

{summaryData.map((item) => ( ))}
Week TRR Total 4 Week Avg TRR + 4Wk Power Adds
{item.week} {item.trrTotal} {item.fourWkAverages} {item.trrPlus4Wk} {item.powerAdds}
)}
)} {/* Navigation */}
); }