import{r as e}from"./rolldown-runtime-QTnfLwEv.js";import{ki as t}from"./lucide-icons-BjbcRgLk.js";import{t as n}from"./dist-DPmmj29U.js";import{h as r,t as i}from"./useQuery-CQCUTxAw.js";import{t as a}from"./useMutation-Du3NQIud.js";import{t as o}from"./fetchFreshEvent-Kkz3MzZN.js";import{t as s}from"./useCurrentUser-boOMG5Xx.js";import{t as c}from"./useNostrPublish-D1pQ9KV-.js";import{t as l}from"./nostrId-DcIQ4FCD.js";import{r as u}from"./optimisticEvent-1jcgWuWv.js";import{i as d}from"./packUtils-2qvnOK3p.js";var f=e(t(),1);function p(e){return{id:e.tags.find(e=>e[0]===`d`)?.[1]??``,title:e.tags.find(e=>e[0]===`title`)?.[1]||e.tags.find(e=>e[0]===`name`)?.[1]||`Untitled Pack`,pubkeys:e.tags.filter(e=>e[0]===`p`&&e[1]).map(e=>e[1]).filter(l),event:e}}function m(){let{nostr:e}=n(),{user:t}=s();return i({queryKey:[`own-follow-packs`,t?.pubkey],queryFn:async({signal:n})=>{if(!t)return[];let r=await e.query([{kinds:[39089],authors:[t.pubkey],limit:100}],{signal:AbortSignal.any([n,AbortSignal.timeout(8e3)])}),i=new Map;for(let e of r){let t=e.tags.find(e=>e[0]===`d`)?.[1]??``,n=i.get(t);(!n||e.created_at>n.created_at)&&i.set(t,e)}return Array.from(i.values()).map(p)},enabled:!!t,staleTime:3e4})}function h(){let{nostr:e}=n(),{user:t}=s(),i=r(),{mutateAsync:l}=c();async function u(n){if(!t)throw Error(`Must be logged in`);let r=await o(e,{kinds:[39089],authors:[t.pubkey],"#d":[n]});if(!r)throw Error(`Pack not found`);return r}function f(e,n){i.setQueryData([`addr-event`,39089,t?.pubkey??``,e],n),i.invalidateQueries({queryKey:[`own-follow-packs`,t?.pubkey]})}return{addToPack:a({mutationFn:async({packId:e,pubkey:t})=>{let n=await u(e);n.tags.some(([e,n])=>e===`p`&&n===t)||f(e,await l({kind:39089,content:n.content,tags:[...n.tags,[`p`,t]],prev:n}))}}),removeFromPack:a({mutationFn:async({packId:e,pubkey:t})=>{let n=await u(e);f(e,await l({kind:39089,content:n.content,tags:n.tags.filter(([e,n])=>!(e===`p`&&n===t)),prev:n}))}}),updatePack:a({mutationFn:async({packId:e,...t})=>{let n=await u(e);f(e,await l({kind:39089,content:n.content,tags:d(n.tags,t),prev:n}))}})}}var g=new Set([`mute`,`pin`,`bookmark`,`communities`]);function _(e){return e.includes(`?iv=`)}async function v(e,t,n){if(!e)return null;try{let r=null;if(_(e))if(t.nip04)r=await t.nip04.decrypt(n,e);else return console.warn(`List uses NIP-04 encryption but signer does not support nip04`),null;else if(t.nip44)r=await t.nip44.decrypt(n,e);else return console.warn(`List uses NIP-44 encryption but signer does not support nip44`),null;if(!r)return null;let i=JSON.parse(r);return Array.isArray(i)?i:null}catch(e){return console.error(`Failed to decrypt list content:`,e),null}}function y(e){let t=t=>e.tags.find(([e])=>e===t)?.[1],n=t(`d`)??``;return{id:n,title:t(`title`)||t(`name`)||n,description:t(`description`)||t(`summary`)||void 0,image:t(`image`)||t(`thumb`)||void 0,pubkeys:e.tags.filter(([e])=>e===`p`).map(([,e])=>e).filter(l),privatePubkeys:[],event:e}}async function b(e,t,n){let r=y(e);if(!e.content)return r;let i=await v(e.content,t,n);if(!i)return r;let a=i.filter(([e])=>e===`p`).map(([,e])=>e).filter(l);if(a.length===0)return r;let o=new Set(r.pubkeys),s=[...r.pubkeys];for(let e of a)o.has(e)||s.push(e);return{...r,pubkeys:s,privatePubkeys:a}}async function x(e,t,n){if(e.length===0)return``;if(!t.nip44)return console.warn(`Cannot re-encrypt private list items: signer does not support NIP-44`),``;let r=e.map(e=>[`p`,e]),i=JSON.stringify(r);return t.nip44.encrypt(n,i)}function S(){let{nostr:e}=n(),{user:t}=s(),l=r(),{mutateAsync:f}=c(),p=i({queryKey:[`user-lists`,t?.pubkey],queryFn:async({signal:n})=>{if(!t)return[];let r=AbortSignal.any([n,AbortSignal.timeout(8e3)]),i=(await e.query([{kinds:[3e4],authors:[t.pubkey],limit:100}],{signal:r})).filter(e=>{let t=e.tags.find(([e])=>e===`d`)?.[1]??``;if(g.has(t))return!1;let n=e.tags.some(([e])=>e===`p`),r=e.tags.some(([e])=>e===`title`||e===`name`),i=!!e.content;return!(!n&&!r&&!i)});return await Promise.all(i.map(e=>b(e,t.signer,t.pubkey)))},enabled:!!t,staleTime:60*1e3}),m=p.data??[],h=[`user-lists`,t?.pubkey];function _(e){let t=l.getQueryData(h);return l.setQueryData(h,t=>e(t??[])),t}function v(e){u(l,h,e)}function y(e,n){l.setQueryData([`addr-event`,3e4,t?.pubkey??``,e],n)}let S=a({mutationFn:async({title:e,description:n,pubkeys:r=[]})=>{if(!t)throw Error(`Must be logged in`);let i=crypto.randomUUID(),a=[[`d`,i],[`title`,e.trim()],...n?.trim()?[[`description`,n.trim()]]:[],...r.map(e=>[`p`,e]),[`alt`,`Follow set: ${e.trim()}`]];return await f({kind:3e4,content:``,tags:a}),{id:i,title:e.trim(),pubkeys:r}},onSuccess:()=>{l.invalidateQueries({queryKey:[`user-lists`,t?.pubkey]})}}),C=a({mutationFn:async({listId:n,pubkey:r})=>{if(!t)throw Error(`Must be logged in`);let i=await o(e,{kinds:[3e4],authors:[t.pubkey],"#d":[n]});if(!i)throw Error(`List not found`);let a=await b(i,t.signer,t.pubkey);if(a.pubkeys.includes(r))return;let s=[...i.tags,[`p`,r]],c=await x(a.privatePubkeys,t.signer,t.pubkey);y(n,await f({kind:3e4,content:c,tags:s,prev:i}))},onMutate:({listId:e,pubkey:t})=>({snapshot:_(n=>n.map(n=>n.id===e&&!n.pubkeys.includes(t)?{...n,pubkeys:[...n.pubkeys,t]}:n))}),onError:(e,t,n)=>{n&&v(n.snapshot)},onSuccess:()=>{l.invalidateQueries({queryKey:[`user-lists`,t?.pubkey]})}}),w=a({mutationFn:async({listId:n,pubkey:r})=>{if(!t)throw Error(`Must be logged in`);let i=await o(e,{kinds:[3e4],authors:[t.pubkey],"#d":[n]});if(!i)throw Error(`List not found`);let a=await b(i,t.signer,t.pubkey),s=i.tags.filter(([e,t])=>!(e===`p`&&t===r)),c=await x(a.privatePubkeys.filter(e=>e!==r),t.signer,t.pubkey);y(n,await f({kind:3e4,content:c,tags:s,prev:i}))},onMutate:({listId:e,pubkey:t})=>({snapshot:_(n=>n.map(n=>n.id===e?{...n,pubkeys:n.pubkeys.filter(e=>e!==t),privatePubkeys:n.privatePubkeys.filter(e=>e!==t)}:n))}),onError:(e,t,n)=>{n&&v(n.snapshot)},onSuccess:()=>{l.invalidateQueries({queryKey:[`user-lists`,t?.pubkey]})}}),T=a({mutationFn:async({listId:n,title:r})=>{if(!t)throw Error(`Must be logged in`);let i=await o(e,{kinds:[3e4],authors:[t.pubkey],"#d":[n]});if(!i)throw Error(`List not found`);let a=await b(i,t.signer,t.pubkey),s=i.tags.map(([e,...t])=>e===`title`?[`title`,r.trim(),...t]:[e,...t]);s.find(([e])=>e===`title`)||s.push([`title`,r.trim()]);let c=await x(a.privatePubkeys,t.signer,t.pubkey);y(n,await f({kind:3e4,content:c,tags:s,prev:i}))},onMutate:({listId:e,title:t})=>({snapshot:_(n=>n.map(n=>n.id===e?{...n,title:t.trim()}:n))}),onError:(e,t,n)=>{n&&v(n.snapshot)},onSuccess:()=>{l.invalidateQueries({queryKey:[`user-lists`,t?.pubkey]})}}),E=a({mutationFn:async({listId:n,...r})=>{if(!t)throw Error(`Must be logged in`);let i=await o(e,{kinds:[3e4],authors:[t.pubkey],"#d":[n]});if(!i)throw Error(`List not found`);let a=await b(i,t.signer,t.pubkey),s=d(i.tags,r),c=await x(a.privatePubkeys,t.signer,t.pubkey);y(n,await f({kind:3e4,content:c,tags:s,prev:i}))},onMutate:({listId:e,title:t,description:n,image:r})=>({snapshot:_(i=>i.map(i=>i.id===e?{...i,title:t.trim(),description:n?.trim()||void 0,image:r?.trim()||void 0}:i))}),onError:(e,t,n)=>{n&&v(n.snapshot)},onSuccess:()=>{l.invalidateQueries({queryKey:[`user-lists`,t?.pubkey]})}}),D=a({mutationFn:async({listId:e})=>{if(!t)throw Error(`Must be logged in`);let n=m.find(t=>t.id===e);if(!n)throw Error(`List not found`);await f({kind:3e4,content:``,tags:[[`d`,e]]});let r=`30000:${t.pubkey}:${e}`;return await f({kind:5,content:`Deleted list`,tags:[[`e`,n.event.id],[`a`,r],[`k`,`30000`]]}),{listId:e}},onSuccess:({listId:e})=>{l.setQueryData([`user-lists`,t?.pubkey],t=>t?t.filter(t=>t.id!==e):[])}});function O(e,t){return m.find(t=>t.id===e)?.pubkeys.includes(t)??!1}return{lists:m,isLoading:p.isLoading,createList:S,addToList:C,removeFromList:w,renameList:T,updateList:E,deleteList:D,isInList:O}}function C(e){let{lists:t}=S(),{data:n=[]}=m();return(0,f.useMemo)(()=>{if(e.length===0)return``;let r=t.find(t=>t.pubkeys.length===e.length&&e.every(e=>t.pubkeys.includes(e)));if(r)return`set:${r.id}`;let i=n.find(t=>t.pubkeys.length===e.length&&e.every(e=>t.pubkeys.includes(e)));return i?`pack:${i.id}`:``},[e,t,n])}export{m as i,S as n,h as r,C as t};