"use client"
import { useState } from "react"
import { Sidebar } from "@/components/dashboard/sidebar"
import { useBankingData } from "@/lib/hooks"
import { Button } from "@/components/ui/button"
import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card"
import {
AlertDialog,
AlertDialogAction,
AlertDialogCancel,
AlertDialogContent,
AlertDialogDescription,
AlertDialogFooter,
AlertDialogHeader,
AlertDialogTitle,
AlertDialogTrigger,
} from "@/components/ui/alert-dialog"
import { Download, Trash2, Upload, RefreshCw, Database, FileJson, Tags } from "lucide-react"
import type { BankingData } from "@/lib/types"
export default function SettingsPage() {
const { data, isLoading, refresh, update } = useBankingData()
const [importing, setImporting] = useState(false)
if (isLoading || !data) {
return (
)
}
const exportData = () => {
const dataStr = JSON.stringify(data, null, 2)
const blob = new Blob([dataStr], { type: "application/json" })
const url = URL.createObjectURL(blob)
const a = document.createElement("a")
a.href = url
a.download = `fintrack-backup-${new Date().toISOString().split("T")[0]}.json`
document.body.appendChild(a)
a.click()
document.body.removeChild(a)
URL.revokeObjectURL(url)
}
const importData = () => {
const input = document.createElement("input")
input.type = "file"
input.accept = ".json"
input.onchange = async (e) => {
const file = (e.target as HTMLInputElement).files?.[0]
if (!file) return
setImporting(true)
try {
const content = await file.text()
const importedData = JSON.parse(content) as BankingData
// Validate structure
if (!importedData.accounts || !importedData.transactions || !importedData.categories || !importedData.folders) {
alert("Format de fichier invalide")
return
}
update(importedData)
alert("Données importées avec succès")
} catch (error) {
alert("Erreur lors de l'import")
} finally {
setImporting(false)
}
}
input.click()
}
const resetData = () => {
localStorage.removeItem("banking-app-data")
window.location.reload()
}
const clearAllCategories = async () => {
try {
const response = await fetch("/api/banking/transactions/clear-categories", {
method: "POST",
})
if (!response.ok) throw new Error("Erreur")
refresh()
alert("Catégories supprimées de toutes les opérations")
} catch (error) {
console.error(error)
alert("Erreur lors de la suppression des catégories")
}
}
const categorizedCount = data.transactions.filter((t) => t.categoryId).length
return (
Paramètres
Gérez vos données et préférences
Données
Exportez ou importez vos données pour les sauvegarder ou les transférer
Statistiques
{data.accounts.length} comptes, {data.transactions.length} transactions, {data.categories.length}{" "}
catégories
Exporter (JSON)
{importing ? "Import..." : "Importer"}
Zone dangereuse
Actions irréversibles - procédez avec prudence
{/* Supprimer catégories des opérations */}
Supprimer les catégories des opérations
{categorizedCount} opération{categorizedCount > 1 ? "s" : ""} catégorisée{categorizedCount > 1 ? "s" : ""}
Supprimer toutes les catégories ?
Cette action va retirer la catégorie de {categorizedCount} opération{categorizedCount > 1 ? "s" : ""}.
Les catégories elles-mêmes ne seront pas supprimées, seulement leur affectation aux opérations.
Annuler
Supprimer les affectations
{/* Réinitialiser toutes les données */}
Réinitialiser toutes les données
Êtes-vous sûr ?
Cette action supprimera définitivement tous vos comptes, transactions, catégories et dossiers.
Cette action est irréversible.
Annuler
Supprimer tout
Format OFX
Informations sur l'import de fichiers
L'application accepte les fichiers au format OFX (Open Financial Exchange) ou QFX. Ces fichiers sont
généralement disponibles depuis l'espace client de votre banque.
Lors de l'import, les transactions sont automatiquement catégorisées selon les mots-clés définis. Les
doublons sont détectés et ignorés automatiquement.
)
}