import React, { useState, useEffect } from 'react'
import { useParams, useNavigate } from 'react-router-dom'
import { ArrowLeft, Plus, Save, Globe, Archive, Trash2 } from 'lucide-react'
import { useAuthStore } from '../../store/authStore'
import { useStoryStore } from '../../store/storyStore'
import { useUIStore } from '../../store/uiStore'
import { Button } from '../../components/ui/Button'
import { ChapterList } from '../../components/story/ChapterList'
import { CollaboratorManager } from '../../components/writer/CollaboratorManager'
import { Modal } from '../../components/ui/Modal'
const ALL_GENRES = ['Fantasy', 'Sci-Fi', 'Romance', 'Historical Fiction', 'Adventure', 'Thriller', 'Mystery', 'Horror', 'Contemporary', 'Poetry']
export const EditStoryPage: React.FC = () => {
const { id } = useParams<{ id: string }>()
const navigate = useNavigate()
const { currentUser } = useAuthStore()
const { stories, chapters, updateStory, deleteStory, updateStoryStatus } = useStoryStore()
const { addToast } = useUIStore()
const [deleteConfirm, setDeleteConfirm] = useState(false)
const [saving, setSaving] = useState(false)
const story = stories.find(s => s.story_id === Number(id))
const [form, setForm] = useState({
title: '',
short_description: '',
content: '',
genres: [] as string[],
mature_content: false,
})
useEffect(() => {
if (story) {
setForm({
title: story.title,
short_description: story.short_description,
content: story.content,
genres: [...story.genres],
mature_content: story.mature_content,
})
}
}, [story?.story_id])
if (!story) {
return (
Story not found
)
}
const canEdit = currentUser?.user_id === story.user_id || currentUser?.role === 'admin'
if (!canEdit) navigate('/writer')
const storyChapters = chapters.filter(c => c.story_id === story.story_id)
const handleSave = async () => {
setSaving(true)
await new Promise(r => setTimeout(r, 400))
updateStory(story.story_id, { ...form, updated_at: new Date().toISOString() })
addToast('Story updated!')
setSaving(false)
}
const handleDelete = () => {
deleteStory(story.story_id)
addToast('Story deleted', 'info')
navigate('/writer')
}
const toggleGenre = (g: string) =>
setForm(f => ({
...f,
genres: f.genres.includes(g) ? f.genres.filter(x => x !== g) : [...f.genres, g],
}))
return (
{/* Header */}
Edit Story
Status: {story.status}
{story.status === 'draft' && (
)}
{story.status === 'published' && (
)}
{/* Form */}
setForm(f => ({ ...f, title: e.target.value }))}
className="w-full px-4 py-3 bg-slate-800 border border-slate-700 rounded-xl text-white focus:outline-none focus:border-indigo-500 font-serif text-lg"
/>
{ALL_GENRES.map(g => (
))}
Mature Content (18+)
{/* Sidebar */}
{/* Chapters */}
Chapters
navigate(`/writer/edit-chapter/${cid}`)}
/>
{/* Collaborators */}
{/* Delete confirm */}
setDeleteConfirm(false)} title="Delete Story" size="sm">
Are you sure you want to permanently delete "{story.title}"? This cannot be undone.
)
}