"use client" import { useState, useEffect } from "react" import { useRouter } from "next/navigation" import { Button } from "@/components/ui/button" import { Input } from "@/components/ui/input" import { Label } from "@/components/ui/label" import { Textarea } from "@/components/ui/textarea" import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card" import { Badge } from "@/components/ui/badge" import { useToast } from "@/hooks/use-toast" import { Artist } from "@/types/database" import { X, Plus, Loader2 } from "lucide-react" const AVAILABLE_SPECIALTIES = [ "Traditional", "Neo-Traditional", "Japanese", "Blackwork", "Realism", "Portraits", "Black & Grey", "Watercolor", "Geometric", "Fine Line", "Illustrative", "Tribal", "Biomechanical", "Abstract", "Minimalist", "Dotwork", "Lettering", "Cover-ups" ] export default function ArtistProfilePage() { const router = useRouter() const { toast } = useToast() const [loading, setLoading] = useState(true) const [saving, setSaving] = useState(false) const [artist, setArtist] = useState(null) const [formData, setFormData] = useState({ bio: "", specialties: [] as string[], instagramHandle: "", hourlyRate: "" }) const [newSpecialty, setNewSpecialty] = useState("") // Fetch artist data on mount useEffect(() => { async function fetchArtist() { try { const response = await fetch("/api/artists/me") if (!response.ok) throw new Error("Failed to fetch artist data") const data = await response.json() setArtist(data) setFormData({ bio: data.bio || "", specialties: data.specialties || [], instagramHandle: data.instagramHandle || "", hourlyRate: data.hourlyRate?.toString() || "" }) } catch (error) { toast({ title: "Error", description: "Failed to load profile data", variant: "destructive" }) } finally { setLoading(false) } } fetchArtist() }, [toast]) const handleSubmit = async (e: React.FormEvent) => { e.preventDefault() setSaving(true) try { const response = await fetch("/api/artists/me", { method: "PUT", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ bio: formData.bio, specialties: formData.specialties, instagramHandle: formData.instagramHandle || null, hourlyRate: formData.hourlyRate ? parseFloat(formData.hourlyRate) : null }) }) if (!response.ok) throw new Error("Failed to update profile") toast({ title: "Success", description: "Your profile has been updated" }) router.refresh() } catch (error) { toast({ title: "Error", description: "Failed to update profile", variant: "destructive" }) } finally { setSaving(false) } } const addSpecialty = (specialty: string) => { if (!formData.specialties.includes(specialty)) { setFormData({ ...formData, specialties: [...formData.specialties, specialty] }) } setNewSpecialty("") } const removeSpecialty = (specialty: string) => { setFormData({ ...formData, specialties: formData.specialties.filter(s => s !== specialty) }) } if (loading) { return (
) } return (

Edit Profile

Update your public-facing profile information

{/* Bio Section */} About You Tell clients about your experience and style