'use client' import { useState, useEffect } from 'react' import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@/components/ui/card' import { Button } from '@/components/ui/button' import { Badge } from '@/components/ui/badge' import { Input } from '@/components/ui/input' import { Label } from '@/components/ui/label' import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/components/ui/select' import { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, DialogTrigger } from '@/components/ui/dialog' import { ArrowLeft, Plus, MapPin, Edit, Trash2, Star } from 'lucide-react' import { motion } from 'framer-motion' import { toast } from 'sonner' import Link from 'next/link' interface Address { id: string firstName: string lastName: string company?: string address1: string address2?: string city: string state: string zipCode: string country: string phone?: string isDefault: boolean type: 'HOME' | 'WORK' | 'OTHER' } export default function AddressesPage() { const [addresses, setAddresses] = useState([]) const [loading, setLoading] = useState(true) const [dialogOpen, setDialogOpen] = useState(false) const [editingAddress, setEditingAddress] = useState
(null) const [formData, setFormData] = useState({ firstName: '', lastName: '', company: '', address1: '', address2: '', city: '', state: '', zipCode: '', country: 'India', phone: '', isDefault: false, type: 'HOME' as 'HOME' | 'WORK' | 'OTHER' }) useEffect(() => { fetchAddresses() }, []) const fetchAddresses = async () => { try { const response = await fetch('/api/user/addresses') if (response.ok) { const data = await response.json() setAddresses(data.addresses || []) } } catch (error) { console.error('Error fetching addresses:', error) toast.error('Failed to load addresses') } finally { setLoading(false) } } const handleSubmit = async (e: React.FormEvent) => { e.preventDefault() const requiredFields = ['firstName', 'lastName', 'address1', 'city', 'state', 'zipCode'] const missingFields = requiredFields.filter(field => !formData[field as keyof typeof formData]) if (missingFields.length > 0) { toast.error('Please fill in all required fields') return } try { const url = editingAddress ? `/api/user/addresses/${editingAddress.id}` : '/api/user/addresses' const method = editingAddress ? 'PUT' : 'POST' const response = await fetch(url, { method, headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(formData) }) if (!response.ok) throw new Error('Failed to save address') toast.success(editingAddress ? 'Address updated successfully' : 'Address added successfully') setDialogOpen(false) resetForm() fetchAddresses() } catch (error) { toast.error('Failed to save address') } } const handleEdit = (address: Address) => { setEditingAddress(address) setFormData({ firstName: address.firstName, lastName: address.lastName, company: address.company || '', address1: address.address1, address2: address.address2 || '', city: address.city, state: address.state, zipCode: address.zipCode, country: address.country, phone: address.phone || '', isDefault: address.isDefault, type: address.type }) setDialogOpen(true) } const handleDelete = async (addressId: string) => { if (!confirm('Are you sure you want to delete this address?')) return try { const response = await fetch(`/api/user/addresses/${addressId}`, { method: 'DELETE' }) if (!response.ok) throw new Error('Failed to delete address') toast.success('Address deleted successfully') fetchAddresses() } catch (error) { toast.error('Failed to delete address') } } const handleSetDefault = async (addressId: string) => { try { const response = await fetch(`/api/user/addresses/${addressId}/default`, { method: 'PUT' }) if (!response.ok) throw new Error('Failed to set default address') toast.success('Default address updated') fetchAddresses() } catch (error) { toast.error('Failed to update default address') } } const resetForm = () => { setFormData({ firstName: '', lastName: '', company: '', address1: '', address2: '', city: '', state: '', zipCode: '', country: 'India', phone: '', isDefault: false, type: 'HOME' as 'HOME' | 'WORK' | 'OTHER' }) setEditingAddress(null) } const handleInputChange = (e: React.ChangeEvent) => { const { name, value, type, checked } = e.target setFormData(prev => ({ ...prev, [name]: type === 'checkbox' ? checked : value })) } if (loading) { return (
) } return (
{/* Header */}

My Addresses

Manage your shipping addresses

{editingAddress ? 'Edit Address' : 'Add New Address'} {editingAddress ? 'Update your address details' : 'Add a new shipping address'}
{/* Addresses List */} {addresses.length === 0 ? (

No addresses found

Add your first address to get started

) : (
{addresses.map((address, index) => (
{address.firstName} {address.lastName} {address.isDefault && ( Default )}
{address.type}
{address.company &&

{address.company}

}

{address.address1}

{address.address2 &&

{address.address2}

}

{address.city}, {address.state} {address.zipCode}

{address.country}

{address.phone &&

{address.phone}

}
{!address.isDefault && ( )}
))}
)}
) }