"use client"; import { useState, useEffect, useCallback } from "react"; import { FileText, Fuel, Upload, Database, CheckCircle, Loader2, History, PlusCircle, } from "lucide-react"; import { Card, CardContent, CardDescription, CardHeader, CardTitle, } from "@/components/ui/card"; import { Button } from "@/components/ui/button"; import { UploadForm } from "@/app/components/uploadForm"; import { createTerraTechImportRecord, processTerraTechImportData, } from "@/app/actions/terratech-workflow"; import { getImportsByLayoutName } from "@/app/actions/imports"; import { TerraTechImportsTable } from "@/app/components/terratech/TerraTechImportsTable"; import { TerraTechSummaryDialog } from "@/app/components/terratech/TerraTechSummaryDialog"; import { useToast } from "@/hooks/use-toast"; interface FileData { id: string; filename: string; mimetype: string; size: number; createdAt: string; updatedAt: string; } interface Import { id: number; name: string; importDate: string; layoutId: number; layout: { id: number; name: string; }; } interface RawImportData { id: number; name: string; importDate: Date | string; layoutId: number; layout: { id: number; name: string; }; } const LAYOUT_NAME = "TerraTech - GasOilWater Summary"; export default function TerraTechFacilitySummariesPage() { const [imports, setImports] = useState([]); const [loading, setLoading] = useState(true); const [summaryDialogOpen, setSummaryDialogOpen] = useState(false); const [selectedImportId, setSelectedImportId] = useState(null); const { toast } = useToast(); // Workflow state const [viewMode, setViewMode] = useState<"imports" | "new-import">("imports"); const [currentStep, setCurrentStep] = useState(1); const [uploadedFile, setUploadedFile] = useState(null); const [isProcessing, setIsProcessing] = useState(false); const [importRecord, setImportRecord] = useState(null); const [error, setError] = useState(null); const loadImports = useCallback(async () => { try { setLoading(true); setError(null); const result = await getImportsByLayoutName(LAYOUT_NAME); if (result.success && result.data) { const transformedImports = result.data.map((item: RawImportData) => ({ id: item.id, name: item.name, importDate: item.importDate instanceof Date ? item.importDate.toISOString() : String(item.importDate), layoutId: item.layoutId, layout: { id: item.layout.id, name: item.layout.name, }, })); setImports(transformedImports); } else { toast({ title: "Error", description: result.error || "Failed to load imports", variant: "destructive", }); setImports([]); } } catch { toast({ title: "Error", description: "Failed to load imports", variant: "destructive", }); } finally { setLoading(false); } }, [toast]); useEffect(() => { loadImports(); }, [loadImports]); // Workflow handlers const handleFileUploaded = (file: FileData) => { setUploadedFile(file); setCurrentStep(2); setError(null); }; const handleCreateImportRecord = async () => { if (!uploadedFile) return; setIsProcessing(true); setError(null); try { const result = await createTerraTechImportRecord( uploadedFile.id, uploadedFile.filename, ); if (result.success && result.data) { const importData = result.data; const importRecordData: Import = { id: importData.id, name: importData.name, importDate: importData.importDate instanceof Date ? importData.importDate.toISOString() : String(importData.importDate), layoutId: importData.layoutId, layout: { id: importData.layout?.id || 0, name: importData.layout?.name || LAYOUT_NAME, }, }; setImportRecord(importRecordData); 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 processTerraTechImportData(importRecord.id); if (result.success) { // After processing, go back to imports view handleBackToImports(); } else { setError(result.error || "Failed to process import data"); } } catch (err) { setError(err instanceof Error ? err.message : "Unknown error occurred"); } finally { setIsProcessing(false); } }; const handleStartNewImport = () => { setViewMode("new-import"); setCurrentStep(1); setUploadedFile(null); setImportRecord(null); setError(null); }; const handleBackToImports = () => { setViewMode("imports"); loadImports(); }; function handleViewSummary(importRecord: Import) { setSelectedImportId(importRecord.id); setSummaryDialogOpen(true); } if (loading && viewMode === "imports") { return (
); } return (

TerraTech Facility Summaries

View Gas, Oil, and Water production summaries for imported data

{error && (

{error}

)} {/* Navigation Buttons */}
{/* Prior Imports View */} {viewMode === "imports" && ( <> {imports.length === 0 ? (

No imports found

No imports using the "{LAYOUT_NAME}" layout configuration were found.
Import data using this layout to see it here.

) : (
)} )} {/* New Import Workflow */} {viewMode === "new-import" && (
{/* Workflow Steps */}
{[ { id: 1, title: "Upload Excel File", description: "Upload the TerraTech GasOilWater Excel file", icon: Upload, status: currentStep >= 1 ? uploadedFile ? "completed" : "pending" : "pending", }, { id: 2, title: "Create Import Record", description: "Create import record with layout configuration", icon: FileText, status: currentStep >= 2 ? importRecord ? "completed" : "pending" : "disabled", }, { id: 3, title: "Import Data", description: "Process Excel file and import data", icon: Database, status: currentStep > 3 ? "completed" : currentStep === 3 ? "pending" : "disabled", }, ].map((step) => { const Icon = step.icon; const getStatusColor = (status: string) => { switch (status) { case "completed": return "text-green-600 bg-green-50 border-green-200"; case "pending": return "text-amber-600 bg-amber-50 border-amber-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 (
Step {step.id}: {step.title}
{step.description}
); })}
{/* Step Content */}
{currentStep === 1 && ( Step 1: Upload Excel File Upload your TerraTech GasOilWater 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 TerraTech - GasOilWater Summary layout configuration

File: {uploadedFile?.filename}

Layout: {LAYOUT_NAME}

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

Import ID: {importRecord?.id}

Import Name: {importRecord?.name}

)}
)}
); }