import {useState} from "react" import {Text} from "react-native" import {useQuery,useQueryClient} from "@tanstack/react-query" import {useRouter} from "expo-router" import {useSession} from "../../src/state/session" import {useAccounts} from "../../src/state/accounts" import {Body,Button,EmptyState,ErrorMessage,Panel,Screen,Title,styles} from "../../src/components/ui" import {planStates,type Plan} from "../../src/lib/plans" export default function Plans(){ const {session,client}=useSession(),{selected}=useAccounts(),router=useRouter(),cache=useQueryClient() const [confirming,setConfirming]=useState(null),[busy,setBusy]=useState(false),[error,setError]=useState("") const query=useQuery({queryKey:["plans",session?.user.id,selected?.id],enabled:!!session,queryFn:({signal})=>client("/api/v1/plans",{signal}),refetchInterval:15000}) const plans=query.data?.filter(p=>p.account_id===selected?.id) async function cancel(){if(!confirming)return;setBusy(true);setError("");try{await client(`/api/v1/plans/${confirming.id}/cancel`,{method:"POST",body:{expected_version:confirming.version}});setConfirming(null);await query.refetch();await cache.invalidateQueries({queryKey:["budget"]})}catch(e){setError(e instanceof Error?e.message:"取消失败")}finally{setBusy(false)}} return 计划{selected?`当前账户:${selected.name}`:"先选择账户,再从候选创建计划。"}计划保留预算,成交需另行记录。