import { useState } from 'react'
import { useMutation } from '@tanstack/react-query'
import {
UserIcon,
BellIcon,
MapIcon,
PaintBrushIcon,
ShieldCheckIcon,
GlobeAltIcon,
} from '@heroicons/react/24/outline'
import clsx from 'clsx'
import { useAuthStore } from '@/store/authStore'
import { useConfigStore } from '@/store/configStore'
import { authApi } from '@/api'
import Card, { CardHeader } from '@/components/ui/Card'
import Button from '@/components/ui/Button'
import Input from '@/components/ui/Input'
import Select from '@/components/ui/Select'
import Checkbox from '@/components/ui/Checkbox'
import { Tabs, TabPanel } from '@/components/ui/Tabs'
import { useToast } from '@/components/ui/Toast'
export default function Configuracion() {
const toast = useToast()
const user = useAuthStore((state) => state.user)
const config = useConfigStore()
const [activeTab, setActiveTab] = useState('perfil')
const [passwordForm, setPasswordForm] = useState({
current: '',
new: '',
confirm: '',
})
const cambiarPasswordMutation = useMutation({
mutationFn: (data: { currentPassword: string; newPassword: string }) =>
authApi.cambiarPassword(data),
onSuccess: () => {
toast.success('Contrasena actualizada')
setPasswordForm({ current: '', new: '', confirm: '' })
},
onError: () => {
toast.error('Error al cambiar contrasena')
},
})
const handleCambiarPassword = (e: React.FormEvent) => {
e.preventDefault()
if (passwordForm.new !== passwordForm.confirm) {
toast.error('Las contrasenas no coinciden')
return
}
if (passwordForm.new.length < 8) {
toast.error('La contrasena debe tener al menos 8 caracteres')
return
}
cambiarPasswordMutation.mutate({
currentPassword: passwordForm.current,
newPassword: passwordForm.new,
})
}
const tabs = [
{ id: 'perfil', label: 'Perfil', icon: UserIcon },
{ id: 'notificaciones', label: 'Notificaciones', icon: BellIcon },
{ id: 'mapa', label: 'Mapa', icon: MapIcon },
{ id: 'apariencia', label: 'Apariencia', icon: PaintBrushIcon },
{ id: 'seguridad', label: 'Seguridad', icon: ShieldCheckIcon },
]
return (
{/* Header */}
Configuracion
Personaliza tu experiencia en la plataforma
{/* Sidebar tabs */}
{tabs.map((tab) => (
))}
{/* Content */}
{/* Perfil */}
{activeTab === 'perfil' && (
{user?.nombre?.charAt(0) || 'U'}
{user?.nombre}
{user?.email}
Rol: {user?.rol}
Para cambiar tu nombre o email, contacta al administrador.
)}
{/* Notificaciones */}
{activeTab === 'notificaciones' && (
Notificaciones en la app
config.setNotificaciones({ sonido: checked })
}
/>
config.setNotificaciones({ escritorio: checked })
}
/>
config.setNotificaciones({ email: checked })
}
/>
Sonidos
config.setNotificaciones({ sonido: checked })
}
/>
)}
{/* Mapa */}
{activeTab === 'mapa' && (
)}
{/* Apariencia */}
{activeTab === 'apariencia' && (
)}
{/* Seguridad */}
{activeTab === 'seguridad' && (
Sesiones activas
Sesion actual
Este navegador - Activo ahora
Activo
Zona de peligro
)}
)
}