import{a as m,j as e}from"./vendor-react-BHG7lGYR.js";import{t as ge,T as L,a as ye}from"./tracks-Bqg0pqgn.js";import{l as ve,n as we,q as V}from"./vendor-IYr-MHu4.js";import{a as Q,u as ne,g as Z,d as q,B as k,C as je,b as Ne,c as be,e as Ce,E as H,L as J,p as Ee,D as Te,f as $,s as U,y as ke}from"./index-BWcMVITa.js";import{T as Se,a as De,b as ee,c as se}from"./tabs-DP-eavm_.js";import{a as ie,u as oe,b as W}from"./vendor-tanstack-BzWBL1hV.js";import{D as Re,a as Ie,b as Oe,c as re,u as _e}from"./useIsRateLimited-HpmSVPdB.js";import{I as B}from"./input-BGBI2Wze.js";import{S as X}from"./Spinner-BIGPirtm.js";import{A as Ae}from"./avatar-B2y8ugWJ.js";import{C as Me}from"./confirmation-dialog-D8kbmfRa.js";import{aj as qe,aK as Pe,T as le,ar as Y,X as te,aL as Le,aM as G,l as Ve,C as ae,aN as F,aO as Qe,u as ze,v as Ke,aP as $e,aQ as Ue,aR as ce,aJ as We,ah as ue,O as Fe,D as He,g as Be,aG as Je,ab as Ge,a2 as Xe,a3 as Ye,aS as Ze,aT as es}from"./vendor-icons-DaGlTw4_.js";import{f as ss,d as rs}from"./vendor-utils-CgOSfOkx.js";import{L as ts}from"./label-N1Bsuay_.js";import{A as de,a as me}from"./alert-tey2YzVZ.js";import{d as as,u as ns}from"./vendor-router-D-s5vIeO.js";import"./dropdown-BYn_8IId.js";const is=ve()(we((r,a)=>({currentTrack:null,isPlaying:!1,currentTime:0,duration:0,volume:100,muted:!1,queue:[],currentIndex:-1,repeat:"off",shuffle:!1,play:s=>{if(!s){r({isPlaying:!0});return}const{queue:t}=a(),n=t.findIndex(o=>o.id===s.id);if(n>=0)r({currentTrack:s,currentIndex:n,isPlaying:!0,currentTime:0});else{const o=[...t,s];r({currentTrack:s,currentIndex:o.length-1,queue:o,isPlaying:!0,currentTime:0})}},pause:()=>{r({isPlaying:!1})},resume:()=>{r({isPlaying:!0})},stop:()=>{r({isPlaying:!1,currentTime:0})},next:()=>{const{queue:s,currentIndex:t,repeat:n,shuffle:o}=a();if(s.length===0)return;let c=t;if(o)c=Math.floor(Math.random()*s.length);else if(t{const{queue:s,currentIndex:t}=a();if(s.length===0||t<=0)return;const n=t-1;r({currentIndex:n,currentTrack:s[n],currentTime:0,isPlaying:!0})},seek:s=>{const{duration:t}=a(),n=Math.max(0,Math.min(s,t||0));r({currentTime:n})},setCurrentTime:s=>{const{duration:t}=a(),n=Math.max(0,Math.min(s,t||0));r({currentTime:n})},setDuration:s=>{r({duration:Math.max(0,s)})},setVolume:s=>{const t=Math.max(0,Math.min(100,s));r({volume:t})},toggleMute:()=>{r({muted:!a().muted})},toggleShuffle:()=>{r({shuffle:!a().shuffle})},setRepeat:s=>{r({repeat:s})},addToQueue:s=>{const{queue:t}=a(),n=[...t,...s];r({queue:n})},removeFromQueue:s=>{const{queue:t,currentIndex:n}=a();if(s<0||s>=t.length)return;const o=t.filter((l,g)=>g!==s);let c=n;if(s0){c=Math.min(c,o.length-1),r({queue:o,currentIndex:c,currentTrack:o[c]||null,isPlaying:o[c]?a().isPlaying:!1});return}else{c=-1,r({queue:o,currentIndex:c,currentTrack:null,isPlaying:!1});return}r({queue:o,currentIndex:c})},reorderQueue:(s,t)=>{const{queue:n,currentIndex:o}=a();if(s<0||s>=n.length||t<0||t>=n.length||s===t)return;const c=[...n],[l]=c.splice(s,1);c.splice(t,0,l);let g=o;s===o?g=t:s=o?g=o-1:s>o&&t<=o&&(g=o+1),r({queue:c,currentIndex:g})},clearQueue:()=>{r({queue:[],currentIndex:-1,currentTrack:null,isPlaying:!1,currentTime:0})}}),{name:"player-storage",partialize:r=>({volume:r.volume,muted:r.muted,repeat:r.repeat,shuffle:r.shuffle,queue:r.queue,currentIndex:r.currentIndex,currentTrack:r.currentTrack})}));class d extends Error{constructor(a,s,t=!1,n){super(a),this.code=s,this.retryable=t,this.originalError=n,this.name="CommentError"}}async function pe(r,a,s){try{return(await Q.post(`/tracks/${r}/comments`,{content:a,parent_id:s})).data.comment}catch(t){if(t instanceof V){if(t.response?.status===401)throw new d("Non autorisé: Veuillez vous connecter pour commenter","VALIDATION",!1,t);if(t.response?.status===404)throw new d("Track ou commentaire parent introuvable","VALIDATION",!1,t);if(t.response?.status===400){const o=t.response?.data?.error||"Données invalides";throw new d(o,"VALIDATION",!1,t)}if(t.response?.status===500)throw new d("Erreur serveur: Impossible de créer le commentaire. Veuillez réessayer plus tard.","SERVER",!0,t);if(t.code==="ECONNABORTED"||t.code==="ETIMEDOUT"||!t.response)throw new d("Erreur réseau: Impossible de se connecter au serveur.","NETWORK",!0,t);const n=t.response?.data?.error||t.message||"Échec de la création du commentaire";throw new d(n,"UNKNOWN",!1,t)}throw t instanceof d?t:new d("Erreur inconnue lors de la création du commentaire","UNKNOWN",!1,t)}}async function os(r,a=1,s=20){try{return(await Q.get(`/tracks/${r}/comments?page=${a}&limit=${s}`)).data}catch(t){if(t instanceof V){if(t.response?.status===404)throw new d("Track introuvable","VALIDATION",!1,t);if(t.response?.status===500)throw new d("Erreur serveur: Impossible de récupérer les commentaires. Veuillez réessayer plus tard.","SERVER",!0,t);if(t.code==="ECONNABORTED"||t.code==="ETIMEDOUT"||!t.response)throw new d("Erreur réseau: Impossible de se connecter au serveur.","NETWORK",!0,t);const n=t.response?.data?.error||t.message||"Échec de la récupération des commentaires";throw new d(n,"UNKNOWN",!1,t)}throw t instanceof d?t:new d("Erreur inconnue lors de la récupération des commentaires","UNKNOWN",!1,t)}}async function ls(r,a){try{return(await Q.put(`/comments/${r}`,{content:a})).data.comment}catch(s){if(s instanceof V){if(s.response?.status===401)throw new d("Non autorisé: Veuillez vous connecter pour modifier ce commentaire","VALIDATION",!1,s);if(s.response?.status===403)throw new d("Non autorisé: Vous ne pouvez modifier que vos propres commentaires","VALIDATION",!1,s);if(s.response?.status===404)throw new d("Commentaire introuvable","VALIDATION",!1,s);if(s.response?.status===400){const n=s.response?.data?.error||"Données invalides";throw new d(n,"VALIDATION",!1,s)}if(s.response?.status===500)throw new d("Erreur serveur: Impossible de mettre à jour le commentaire. Veuillez réessayer plus tard.","SERVER",!0,s);if(s.code==="ECONNABORTED"||s.code==="ETIMEDOUT"||!s.response)throw new d("Erreur réseau: Impossible de se connecter au serveur.","NETWORK",!0,s);const t=s.response?.data?.error||s.message||"Échec de la mise à jour du commentaire";throw new d(t,"UNKNOWN",!1,s)}throw s instanceof d?s:new d("Erreur inconnue lors de la mise à jour du commentaire","UNKNOWN",!1,s)}}async function cs(r){try{await Q.delete(`/comments/${r}`)}catch(a){if(a instanceof V){if(a.response?.status===401)throw new d("Non autorisé: Veuillez vous connecter pour supprimer ce commentaire","VALIDATION",!1,a);if(a.response?.status===403)throw new d("Non autorisé: Vous ne pouvez supprimer que vos propres commentaires","VALIDATION",!1,a);if(a.response?.status===404)throw new d("Commentaire introuvable","VALIDATION",!1,a);if(a.response?.status===500)throw new d("Erreur serveur: Impossible de supprimer le commentaire. Veuillez réessayer plus tard.","SERVER",!0,a);if(a.code==="ECONNABORTED"||a.code==="ETIMEDOUT"||!a.response)throw new d("Erreur réseau: Impossible de se connecter au serveur.","NETWORK",!0,a);const s=a.response?.data?.error||a.message||"Échec de la suppression du commentaire";throw new d(s,"UNKNOWN",!1,a)}throw a instanceof d?a:new d("Erreur inconnue lors de la suppression du commentaire","UNKNOWN",!1,a)}}async function us(r,a=1,s=20){try{return(await Q.get(`/comments/${r}/replies?page=${a}&limit=${s}`)).data}catch(t){if(t instanceof V){if(t.response?.status===404)throw new d("Commentaire parent introuvable","VALIDATION",!1,t);if(t.response?.status===500)throw new d("Erreur serveur: Impossible de récupérer les réponses. Veuillez réessayer plus tard.","SERVER",!0,t);if(t.code==="ECONNABORTED"||t.code==="ETIMEDOUT"||!t.response)throw new d("Erreur réseau: Impossible de se connecter au serveur.","NETWORK",!0,t);const n=t.response?.data?.error||t.message||"Échec de la récupération des réponses";throw new d(n,"UNKNOWN",!1,t)}throw t instanceof d?t:new d("Erreur inconnue lors de la récupération des réponses","UNKNOWN",!1,t)}}const ds=3;function he({comment:r,trackId:a,depth:s=0,className:t}){const{data:n}=ne(),{success:o,error:c}=Z(),l=ie(),[g,p]=m.useState(!1),[b,v]=m.useState(!1),[j,u]=m.useState(""),[f,N]=m.useState(r.content),[C,D]=m.useState(s===0),[I,w]=m.useState(!1),{data:T,isLoading:A}=oe({queryKey:["commentReplies",r.id],queryFn:()=>us(r.id,1,20),enabled:C&&!r.replies}),R=r.replies||T?.replies||[],x=spe(a,h,r.id),onMutate:async h=>{await l.cancelQueries({queryKey:["commentReplies",r.id]}),await l.cancelQueries({queryKey:["trackComments",a]});const E=l.getQueryData(["commentReplies",r.id]),y=l.getQueryData(["trackComments",a]);if(E&&n){const M={id:`temp-${Date.now()}`,track_id:a,user_id:n.id,parent_id:r.id,content:h.trim(),is_edited:!1,created_at:new Date().toISOString(),updated_at:new Date().toISOString(),user:{id:n.id,username:n.username||"",avatar:n.avatar_url}};l.setQueryData(["commentReplies",r.id],{...E,replies:[...E.replies||[],M]})}return{previousReplies:E,previousComments:y}},onError:(h,E,y)=>{y?.previousReplies&&l.setQueryData(["commentReplies",r.id],y.previousReplies),y?.previousComments&&l.setQueryData(["trackComments",a],y.previousComments),c(h.message||"Erreur lors de la publication de la réponse")},onSuccess:()=>{l.invalidateQueries({queryKey:["trackComments",a]}),l.invalidateQueries({queryKey:["commentReplies",r.id]}),u(""),p(!1),D(!0),o("Réponse publiée")}}),_=W({mutationFn:h=>ls(r.id,h),onMutate:async h=>{await l.cancelQueries({queryKey:["trackComments",a]}),await l.cancelQueries({queryKey:["commentReplies",r.parent_id||r.id]});const E=l.getQueryData(["trackComments",a]),y=r.parent_id?l.getQueryData(["commentReplies",r.parent_id]):null;return E&&l.setQueryData(["trackComments",a],{...E,comments:E.comments.map(M=>M.id===r.id?{...M,content:h.trim(),is_edited:!0,updated_at:new Date().toISOString()}:M)}),y&&r.parent_id&&l.setQueryData(["commentReplies",r.parent_id],{...y,replies:y.replies.map(M=>M.id===r.id?{...M,content:h.trim(),is_edited:!0,updated_at:new Date().toISOString()}:M)}),{previousComments:E,previousReplies:y}},onError:(h,E,y)=>{y?.previousComments&&l.setQueryData(["trackComments",a],y.previousComments),y?.previousReplies&&r.parent_id&&l.setQueryData(["commentReplies",r.parent_id],y.previousReplies),c(h.message||"Erreur lors de la modification")},onSuccess:()=>{l.invalidateQueries({queryKey:["trackComments",a]}),v(!1),o("Commentaire modifié")}}),z=W({mutationFn:()=>cs(r.id),onMutate:async()=>{await l.cancelQueries({queryKey:["trackComments",a]}),await l.cancelQueries({queryKey:["commentReplies",r.parent_id||r.id]});const h=l.getQueryData(["trackComments",a]),E=r.parent_id?l.getQueryData(["commentReplies",r.parent_id]):null;return h&&l.setQueryData(["trackComments",a],{...h,comments:h.comments.filter(y=>y.id!==r.id),total:Math.max((h.total||1)-1,0)}),E&&r.parent_id&&l.setQueryData(["commentReplies",r.parent_id],{...E,replies:E.replies.filter(y=>y.id!==r.id)}),{previousComments:h,previousReplies:E}},onError:(h,E,y)=>{y?.previousComments&&l.setQueryData(["trackComments",a],y.previousComments),y?.previousReplies&&r.parent_id&&l.setQueryData(["commentReplies",r.parent_id],y.previousReplies),c("Erreur lors de la suppression")},onSuccess:()=>{l.invalidateQueries({queryKey:["trackComments",a]}),w(!1),o("Commentaire supprimé")}}),K=h=>{h.preventDefault(),!(!j.trim()||!n)&&S.mutate(j.trim())},fe=h=>{h.preventDefault(),f.trim()&&_.mutate(f.trim())},xe=()=>{z.mutate()};return e.jsxs(e.Fragment,{children:[e.jsx("div",{className:q("space-y-4",t),children:e.jsxs("div",{className:"flex gap-4",children:[e.jsx(Ae,{src:r.user?.avatar,fallback:r.user?.username?.charAt(0).toUpperCase()||"U",size:"sm",className:"h-8 w-8 shrink-0"}),e.jsxs("div",{className:"flex-1 min-w-0 space-y-2",children:[e.jsxs("div",{className:"flex items-start justify-between gap-2",children:[e.jsx("div",{className:"flex-1 min-w-0",children:e.jsxs("div",{className:"flex items-center gap-2 flex-wrap",children:[e.jsx("span",{className:"font-medium text-sm",children:r.user?.username||"Utilisateur"}),e.jsx("span",{className:"text-xs text-muted-foreground",children:ss(new Date(r.created_at),{addSuffix:!0,locale:rs})}),r.is_edited&&e.jsx("span",{className:"text-xs text-muted-foreground italic",children:"(modifié)"})]})}),(O||i)&&e.jsxs(Re,{children:[e.jsx(Ie,{asChild:!0,children:e.jsx(k,{variant:"ghost",size:"icon",className:"h-6 w-6",children:e.jsx(qe,{className:"h-4 w-4"})})}),e.jsxs(Oe,{align:"end",children:[O&&e.jsxs(re,{onClick:()=>v(!0),children:[e.jsx(Pe,{className:"mr-2 h-4 w-4"}),"Modifier"]}),i&&e.jsxs(re,{onClick:()=>w(!0),className:"text-destructive",children:[e.jsx(le,{className:"mr-2 h-4 w-4"}),"Supprimer"]})]})]})]}),b?e.jsxs("form",{onSubmit:fe,className:"space-y-2",children:[e.jsx(B,{value:f,onChange:h=>N(h.target.value),maxLength:500,autoFocus:!0}),e.jsxs("div",{className:"flex gap-2",children:[e.jsxs(k,{type:"submit",size:"sm",disabled:!f.trim()||_.isPending,children:[_.isPending?e.jsx(X,{size:"sm",className:"mr-2"}):e.jsx(Y,{className:"h-4 w-4 mr-2"}),"Enregistrer"]}),e.jsxs(k,{type:"button",variant:"outline",size:"sm",onClick:()=>{v(!1),N(r.content)},children:[e.jsx(te,{className:"h-4 w-4 mr-2"}),"Annuler"]})]})]}):e.jsx("p",{className:"text-sm whitespace-pre-wrap break-words",children:r.content}),!b&&e.jsxs("div",{className:"flex items-center gap-4",children:[x&&n&&e.jsxs(k,{variant:"ghost",size:"sm",onClick:()=>p(!g),className:"h-7 text-xs",children:[e.jsx(Le,{className:"h-3 w-3 mr-1"}),"Répondre"]}),R.length>0&&e.jsxs(k,{variant:"ghost",size:"sm",onClick:()=>D(!C),className:"h-7 text-xs",children:[e.jsx(G,{className:"h-3 w-3 mr-1"}),C?"Masquer":"Afficher"," ",R.length," ",R.length===1?"réponse":"réponses"]})]}),g&&n&&e.jsxs("form",{onSubmit:K,className:"space-y-2 pt-2",children:[e.jsx(B,{value:j,onChange:h=>u(h.target.value),placeholder:`Répondre à ${r.user?.username}...`,maxLength:500,autoFocus:!0}),e.jsxs("div",{className:"flex gap-2",children:[e.jsxs(k,{type:"submit",size:"sm",disabled:!j.trim()||S.isPending,children:[S.isPending?e.jsx(X,{size:"sm",className:"mr-2"}):e.jsx(Y,{className:"h-4 w-4 mr-2"}),"Publier"]}),e.jsxs(k,{type:"button",variant:"outline",size:"sm",onClick:()=>{p(!1),u("")},children:[e.jsx(te,{className:"h-4 w-4 mr-2"}),"Annuler"]})]})]}),C&&e.jsx("div",{className:"space-y-4 pt-2 pl-4 border-l-2 border-muted",children:A?e.jsx("div",{className:"flex items-center justify-center py-4",children:e.jsx(Loader2,{className:"h-4 w-4 animate-spin text-muted-foreground"})}):R.length>0?R.map(h=>e.jsx(he,{comment:h,trackId:a,depth:s+1},h.id)):null})]})]})}),e.jsx(Me,{open:I,onClose:()=>w(!1),onConfirm:xe,title:"Supprimer le commentaire",description:"Êtes-vous sûr de vouloir supprimer ce commentaire ? Cette action est irréversible.",confirmLabel:"Supprimer",cancelLabel:"Annuler",variant:"destructive",isLoading:z.isPending})]})}function ms({trackId:r}){const{data:a}=ne(),s=Z(),t=ie(),n=_e(),[o,c]=m.useState(""),[l,g]=m.useState(null),[p,b]=m.useState(1),v=20,{data:j,isLoading:u,error:f}=oe({queryKey:["trackComments",r,p],queryFn:()=>os(r,p,v),enabled:!!r}),[N,C]=m.useState(""),[D,I]=m.useState(0),w=W({mutationFn:i=>pe(r,i),onMutate:async i=>{await t.cancelQueries({queryKey:["trackComments",r]});const S=t.getQueryData(["trackComments",r,p]);if(S&&a){const _={id:`temp-${Date.now()}`,track_id:r,user_id:a.id,content:i.trim(),is_edited:!1,created_at:new Date().toISOString(),updated_at:new Date().toISOString(),user:{id:a.id,username:a.username||"",avatar:a.avatar_url}};t.setQueryData(["trackComments",r,p],{...S,comments:[_,...S.comments],total:(S.total||0)+1})}return{previousComments:S}},onError:(i,S,_)=>{_?.previousComments&&t.setQueryData(["trackComments",r,p],_.previousComments),g(new Error(i.message||"Erreur lors de la publication")),C(o.trim())},onSuccess:()=>{t.invalidateQueries({queryKey:["trackComments",r]}),c(""),g(null),I(0),C(""),s.success("Commentaire publié")}}),T=i=>{i.preventDefault(),!(!o.trim()||!a)&&(C(o.trim()),w.mutate(o.trim()))},A=async()=>{if(!(!N||D>=3)){I(i=>i+1);try{await w.mutateAsync(N)}catch{}}},R=j?.comments?.filter(i=>!i.parent_id)||[],x=j?.total||0,O=Math.ceil(x/v);return e.jsxs(je,{children:[e.jsx(Ne,{children:e.jsxs(be,{className:"flex items-center gap-2",children:[e.jsx(G,{className:"h-5 w-5"}),"Commentaires (",j?.total||0,")"]})}),e.jsxs(Ce,{className:"space-y-4",children:[l&&e.jsx(H,{error:l,variant:"banner",severity:"error",context:{action:"publishing comment",resource:"comment"},onRetry:D<3?A:void 0,onDismiss:()=>{g(null),I(0),C("")}}),a?e.jsxs("form",{onSubmit:T,className:"flex gap-2",children:[e.jsx(B,{value:o,onChange:i=>c(i.target.value),placeholder:"Écrire un commentaire...",maxLength:500}),e.jsx(k,{type:"submit",disabled:!o.trim()||w.isPending||n,children:w.isPending?e.jsx(X,{size:"sm"}):e.jsx(Y,{className:"h-4 w-4"})})]}):e.jsx("p",{className:"text-sm text-muted-foreground",children:"Connectez-vous pour commenter"}),u?e.jsx("div",{className:"flex justify-center py-8",children:e.jsx(J,{})}):f?e.jsx(H,{error:f instanceof Error?f:new Error("Failed to load comments"),variant:"card",severity:"error",context:{action:"fetching comments",resource:"comments",resourceId:r},onRetry:()=>t.invalidateQueries({queryKey:["trackComments",r]})}):R.length===0?e.jsx("div",{className:"text-center text-muted-foreground py-8",children:"Aucun commentaire pour le moment. Soyez le premier à commenter !"}):e.jsxs("div",{className:"space-y-4",children:[R.map(i=>e.jsx(he,{comment:i,trackId:r},i.id)),O>1&&e.jsxs("div",{className:"flex items-center justify-center gap-2 pt-4",children:[e.jsx(k,{variant:"outline",size:"sm",onClick:()=>b(i=>Math.max(1,i-1)),disabled:p===1,children:"Précédent"}),e.jsxs("span",{className:"text-sm text-muted-foreground",children:["Page ",p," sur ",O]}),e.jsx(k,{variant:"outline",size:"sm",onClick:()=>b(i=>Math.min(O,i+1)),disabled:p===O,children:"Suivant"})]})]})]})]})}function ps({open:r,onClose:a,trackId:s}){const[t,n]=m.useState(null),[o,c]=m.useState(!1),[l,g]=m.useState(!1),[p,b]=m.useState(null),[v,j]=m.useState(0),u=m.useRef(null),f=Z();m.useEffect(()=>{r&&!t&&N()},[r]);const N=async()=>{const w=async()=>{const T=new Date;T.setDate(T.getDate()+7);const A=await ge.createShare(s,{permissions:"read",expires_at:T.toISOString()});n(A),b(null),j(0),u.current=null};u.current=w,c(!0),b(null);try{await w()}catch(T){const A=Ee(T);b(new Error(A.message))}finally{c(!1)}},C=async()=>{if(!(!u.current||v>=3)){j(w=>w+1),c(!0);try{await u.current()}catch{}finally{c(!1)}}},D=async()=>{if(!t)return;const w=`${window.location.origin}/tracks/shared/${t.token}`;try{await navigator.clipboard.writeText(w),g(!0),f.success("Link copied to clipboard"),setTimeout(()=>g(!1),2e3)}catch{f.error("Failed to copy link")}},I=t?`${window.location.origin}/tracks/shared/${t.token}`:"";return e.jsx(Te,{open:r,onClose:a,title:"Share Track",variant:"default",size:"md",children:e.jsxs("div",{className:"space-y-4",children:[p&&e.jsx(H,{error:p,variant:"banner",severity:"error",context:{action:"creating share link",resource:"track",resourceId:s},onRetry:v<3?C:void 0,onDismiss:()=>{b(null),j(0),u.current=null}}),o?e.jsx("div",{className:"text-center py-4",children:"Creating share link..."}):t?e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx(ts,{children:"Share Link"}),e.jsxs("div",{className:"flex gap-2",children:[e.jsx(B,{value:I,readOnly:!0,className:"flex-1"}),e.jsx(k,{onClick:D,variant:"outline",children:l?e.jsx(Ve,{className:"h-4 w-4"}):e.jsx(ae,{className:"h-4 w-4"})})]})]}),e.jsx("div",{className:"text-xs text-muted-foreground",children:"This link will expire in 7 day(s)"}),e.jsxs("div",{className:"flex justify-end gap-2 pt-4",children:[e.jsx(k,{variant:"outline",onClick:a,children:"Close"}),e.jsxs(k,{onClick:D,children:[e.jsx(ae,{className:"mr-2 h-4 w-4"}),"Copy Link"]})]})]}):e.jsx("div",{className:"text-center text-destructive",children:"Failed to create share link"})]})})}class P extends Error{constructor(a,s,t=!1,n){super(a),this.code=s,this.retryable=t,this.originalError=n,this.name="TrackHistoryError"}}async function hs(r,a){try{const s=new URLSearchParams;a?.limit!==void 0&&s.append("limit",a.limit.toString()),a?.offset!==void 0&&s.append("offset",a.offset.toString());const t=s.toString(),n=`/tracks/${r}/history${t?`?${t}`:""}`;return(await Q.get(n)).data}catch(s){if(s instanceof V){if(s.response?.status===400)throw new P("Requête invalide: ID de track invalide","VALIDATION",!1,s);if(s.response?.status===404)throw new P("Track introuvable","NOT_FOUND",!1,s);if(s.response?.status===500)throw new P("Erreur serveur: Impossible de récupérer l'historique. Veuillez réessayer plus tard.","SERVER",!0,s);if(s.code==="ECONNABORTED"||s.code==="ETIMEDOUT"||!s.response)throw new P("Erreur réseau: Impossible de se connecter au serveur. Veuillez vérifier votre connexion.","NETWORK",!0,s);const t=s.response?.data?.error||s.message||"Échec de la récupération de l'historique";throw new P(t,"UNKNOWN",!1,s)}throw s instanceof P?s:new P("Erreur inconnue lors de la récupération de l'historique","UNKNOWN",!1,s)}}function fs({trackId:r,className:a,limit:s=50}){const[t,n]=m.useState([]),[o,c]=m.useState(!0),[l,g]=m.useState(null),[p,b]=m.useState(0),[v,j]=m.useState(0),[u]=m.useState(s);m.useEffect(()=>{f()},[r,v]);const f=async()=>{c(!0),g(null);try{const i=await hs(r,{limit:u,offset:v});n(i.history),b(i.total)}catch(i){i instanceof P?g(i.message):g("Impossible de charger l'historique")}finally{c(!1)}},N=i=>{const S=new Date(i);return new Intl.DateTimeFormat("fr-FR",{year:"numeric",month:"long",day:"numeric",hour:"2-digit",minute:"2-digit"}).format(S)},C=i=>{switch(i){case"created":return ue;case"updated":return We;case"deleted":return le;case"published":return ce;case"unpublished":return Ue;case"restored":return $e;default:return F}},D=i=>{switch(i){case"created":return"Créé";case"updated":return"Modifié";case"deleted":return"Supprimé";case"published":return"Publié";case"unpublished":return"Dépublié";case"restored":return"Restauré";default:return i}},I=i=>{switch(i){case"created":return"text-kodo-lime bg-kodo-lime/10";case"updated":return"text-kodo-steel bg-kodo-steel/10";case"deleted":return"text-kodo-red bg-kodo-red/10";case"published":return"text-kodo-magenta bg-kodo-magenta/10";case"unpublished":return"text-kodo-gold bg-kodo-gold/10";case"restored":return"text-cyan-600 bg-cyan-50";default:return"text-kodo-content-dim bg-kodo-void"}},w=i=>{if(!i)return null;try{return JSON.parse(i)}catch{return i}},T=i=>i==null?"":typeof i=="string"?i:typeof i=="object"?JSON.stringify(i,null,2):String(i),A=()=>{v>0&&j(Math.max(0,v-u))},R=()=>{v+u0,O=v+u0&&e.jsxs("span",{className:"text-sm text-muted-foreground",children:["(",p,")"]})]})}),t.length===0?e.jsxs("div",{className:"text-center py-8 text-muted-foreground",children:[e.jsx(F,{className:"h-12 w-12 mx-auto mb-4 opacity-50"}),e.jsx("p",{children:"Aucune modification enregistrée"})]}):e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"relative",children:[e.jsx("div",{className:"absolute left-6 top-0 bottom-0 w-0.5 bg-border"}),e.jsx("div",{className:"space-y-6",children:t.map(i=>{const S=C(i.action),_=I(i.action),z=w(i.old_value),K=w(i.new_value);return e.jsxs("div",{className:"relative flex gap-4",children:[e.jsx("div",{className:q("relative z-10 flex h-12 w-12 items-center justify-center rounded-full border-2 border-background",_),children:e.jsx(S,{className:"h-5 w-5"})}),e.jsxs("div",{className:"flex-1 space-y-2 pb-6",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("span",{className:q("text-sm font-semibold",_.split(" ")[0]),children:D(i.action)}),e.jsxs("span",{className:"text-xs text-muted-foreground",children:["#",i.id]})]}),e.jsxs("div",{className:"flex items-center gap-1 text-xs text-muted-foreground",children:[e.jsx(Qe,{className:"h-3 w-3"}),e.jsx("span",{children:N(i.created_at)})]})]}),(z!==null||K!==null)&&e.jsxs("div",{className:"space-y-2 rounded-lg border bg-muted/50 p-4 text-sm",children:[z!==null&&e.jsxs("div",{children:[e.jsx("div",{className:"text-xs font-medium text-muted-foreground mb-1",children:"Ancienne valeur:"}),e.jsx("pre",{className:"text-xs bg-background rounded p-2 overflow-x-auto",children:T(z)})]}),K!==null&&e.jsxs("div",{children:[e.jsx("div",{className:"text-xs font-medium text-muted-foreground mb-1",children:"Nouvelle valeur:"}),e.jsx("pre",{className:"text-xs bg-background rounded p-2 overflow-x-auto",children:T(K)})]})]})]})]},i.id)})})]}),p>u&&e.jsxs("div",{className:"flex items-center justify-between border-t pt-4",children:[e.jsxs("div",{className:"text-sm text-muted-foreground",children:["Affichage ",v+1," -"," ",Math.min(v+u,p)," sur ",p]}),e.jsxs("div",{className:"flex gap-2",children:[e.jsxs(k,{variant:"outline",size:"sm",onClick:A,disabled:!x,children:[e.jsx(ze,{className:"h-4 w-4 mr-1"}),"Précédent"]}),e.jsxs(k,{variant:"outline",size:"sm",onClick:R,disabled:!O,children:["Suivant",e.jsx(Ke,{className:"h-4 w-4 ml-1"})]})]})]})]})]})}async function xs(r){try{return(await Q.get(`/tracks/${r}/stats`)).data.stats}catch(a){if(a instanceof V){if(a.response?.status===404)throw new L("Track introuvable","VALIDATION",!1,a);if(a.response?.status===500)throw new L("Erreur serveur: Impossible de récupérer les statistiques. Veuillez réessayer plus tard.","SERVER",!0,a);if(a.code==="ECONNABORTED"||a.code==="ETIMEDOUT"||!a.response)throw new L("Erreur réseau: Impossible de se connecter au serveur.","NETWORK",!0,a);const s=a.response?.data?.error||a.message||"Échec de la récupération des statistiques";throw new L(s,"UNKNOWN",!1,a)}throw a instanceof L?a:new L("Erreur inconnue lors de la récupération des statistiques","UNKNOWN",!1,a)}}function gs({trackId:r,className:a,variant:s="horizontal",showLabels:t=!1}){const[n,o]=m.useState(null),[c,l]=m.useState(!0),[g,p]=m.useState(null);m.useEffect(()=>{(async()=>{l(!0),p(null);try{const f=await xs(r);o(f)}catch(f){f instanceof L?p(f.message):p("Impossible de charger les statistiques")}finally{l(!1)}})()},[r]);const b=u=>u>=1e6?`${(u/1e6).toFixed(1)}M`:u>=1e3?`${(u/1e3).toFixed(1)}K`:u.toString(),v=u=>{const f=Math.floor(u/3600),N=Math.floor(u%3600/60),C=u%60;return f>0?`${f}h ${N}m`:N>0?`${N}m ${C}s`:`${C}s`};if(c)return e.jsx("div",{className:q("flex items-center justify-center p-4",a),children:e.jsx(J,{size:"sm"})});if(g)return e.jsx(de,{variant:"destructive",className:a,children:e.jsx(me,{className:"text-sm",children:g})});if(!n)return null;const j=[{icon:ce,value:b(n.views),label:"Vues",rawValue:n.views},{icon:Fe,value:b(n.likes),label:"Likes",rawValue:n.likes},{icon:G,value:b(n.comments),label:"Commentaires",rawValue:n.comments},{icon:He,value:b(n.downloads),label:"Téléchargements",rawValue:n.downloads},{icon:Be,value:v(n.total_play_time),label:"Temps d'écoute",rawValue:n.total_play_time}];return s==="vertical"?e.jsx("div",{className:q("space-y-4",a),children:j.map((u,f)=>{const N=u.icon;return e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(N,{className:"h-4 w-4 text-muted-foreground"}),e.jsxs("div",{className:"flex-1",children:[t&&e.jsx("div",{className:"text-xs text-muted-foreground",children:u.label}),e.jsx("div",{className:"text-sm font-medium",children:u.value})]})]},f)})}):e.jsx("div",{className:q("flex flex-wrap gap-4",a),children:j.map((u,f)=>{const N=u.icon;return e.jsxs("div",{className:"flex items-center gap-1.5",children:[e.jsx(N,{className:"h-4 w-4 text-muted-foreground"}),e.jsx("span",{className:"text-sm font-medium",children:u.value}),t&&e.jsx("span",{className:"text-xs text-muted-foreground ml-1",children:u.label})]},f)})})}function ys(r){const a=Math.floor(r/60),s=Math.floor(r%60);return`${a}:${s.toString().padStart(2,"0")}`}function qs(){const{id:r}=as(),a=ns(),[s,t]=m.useState(null),[n,o]=m.useState(!0),[c,l]=m.useState(null),[g,p]=m.useState(!1),{play:b,pause:v,currentTrack:j,isPlaying:u,addToQueue:f}=is(),N=async()=>{if(!r){l(new Error("Track ID is required")),o(!1);return}try{o(!0),l(null);const x=await ye(r);t(x)}catch(x){const O=x instanceof L||x instanceof Error?x.message:"Failed to load track";l(new Error(O))}finally{o(!1)}};m.useEffect(()=>{N()},[r]);const C=x=>({id:x.id,title:x.title,artist:x.artist,album:x.album,duration:x.duration,url:x.stream_manifest_url||x.file_path,cover:x.cover_art_path,genre:x.genre}),D=()=>{if(!s)return;const x=C(s);b(x)},I=()=>{v()},w=()=>{if(!s)return;const x=C(s);f([x]),ke.success("Track ajouté à la file d'attente")},T=()=>{p(!0)},R=j?.id===s?.id&&u;return n?e.jsx("div",{className:"container mx-auto px-4 py-8",children:e.jsxs("div",{className:"flex items-center justify-center min-h-[400px]",children:[e.jsx(J,{}),e.jsx("span",{className:"ml-2 text-kodo-secondary",children:"Chargement du track..."})]})}):c||!s?e.jsx("div",{className:"container mx-auto px-4 py-8",children:e.jsx(H,{error:c||new Error("Track introuvable"),variant:"card",severity:"error",context:{action:"fetching track",resource:"track",resourceId:r},onRetry:N,actions:[{label:"Retour",onClick:()=>a(-1),variant:"outline"}]})}):e.jsxs("div",{className:"container mx-auto px-4 py-8",children:[e.jsxs($,{onClick:()=>a(-1),variant:"ghost",className:"mb-4",children:[e.jsx(Je,{className:"h-4 w-4 mr-2"}),"Retour"]}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-6",children:[e.jsx("div",{className:"md:col-span-1",children:e.jsx(U,{variant:"gaming",children:s.cover_art_path?e.jsx("img",{src:s.cover_art_path,alt:s.title,className:"w-full aspect-square object-cover rounded-lg"}):e.jsx("div",{className:"w-full aspect-square bg-kodo-slate rounded-lg flex items-center justify-center",children:e.jsx(Ge,{className:"h-24 w-24 text-kodo-steel"})})})}),e.jsxs("div",{className:"md:col-span-2 space-y-6",children:[e.jsxs(U,{variant:"default",children:[e.jsx("h1",{className:"text-3xl font-display font-bold text-white mb-2",children:s.title}),e.jsx("p",{className:"text-xl text-kodo-secondary mb-4",children:s.artist}),s.album&&e.jsxs("p",{className:"text-lg text-kodo-secondary mb-4",children:["Album: ",s.album]}),e.jsxs("div",{className:"flex gap-2 mb-6",children:[R?e.jsxs($,{onClick:I,variant:"primary",size:"lg",children:[e.jsx(Xe,{className:"h-5 w-5 mr-2"}),"Pause"]}):e.jsxs($,{onClick:D,variant:"gaming",size:"lg",children:[e.jsx(Ye,{className:"h-5 w-5 mr-2"}),"Play"]}),e.jsxs($,{onClick:w,variant:"secondary",size:"lg",title:"Ajouter à la file d'attente",children:[e.jsx(ue,{className:"h-5 w-5 mr-2"}),"Queue"]}),e.jsxs($,{onClick:T,variant:"ghost",size:"lg",title:"Partager",children:[e.jsx(Ze,{className:"h-5 w-5 mr-2"}),"Partager"]})]}),e.jsxs("div",{className:"grid grid-cols-2 md:grid-cols-4 gap-4 text-sm",children:[e.jsxs("div",{children:[e.jsx("p",{className:"text-kodo-secondary",children:"Durée"}),e.jsx("p",{className:"font-semibold text-white",children:ys(s.duration)})]}),s.genre&&e.jsxs("div",{children:[e.jsx("p",{className:"text-kodo-secondary",children:"Genre"}),e.jsx("p",{className:"font-semibold text-white",children:s.genre})]}),s.year&&e.jsxs("div",{children:[e.jsx("p",{className:"text-kodo-secondary",children:"Année"}),e.jsx("p",{className:"font-semibold text-white",children:s.year})]}),e.jsxs("div",{children:[e.jsx("p",{className:"text-kodo-secondary",children:"Lectures"}),e.jsx("p",{className:"font-semibold text-kodo-steel",children:s.play_count})]}),e.jsxs("div",{children:[e.jsx("p",{className:"text-kodo-secondary",children:"Likes"}),e.jsx("p",{className:"font-semibold text-kodo-magenta",children:s.like_count})]})]})]}),e.jsxs(U,{variant:"gaming",children:[e.jsxs("div",{className:"flex items-center gap-2 mb-4",children:[e.jsx(es,{className:"h-5 w-5 text-kodo-gold"}),e.jsx("h2",{className:"text-xl font-heading font-bold text-white",children:"Analytics"})]}),e.jsx(gs,{trackId:parseInt(s.id,10)||0,variant:"horizontal",showLabels:!0})]}),e.jsxs(Se,{defaultValue:"comments",className:"w-full",children:[e.jsxs(De,{children:[e.jsxs(ee,{value:"comments",children:[e.jsx(G,{className:"mr-2 h-4 w-4"}),"Comments"]}),e.jsxs(ee,{value:"history",children:[e.jsx(F,{className:"mr-2 h-4 w-4"}),"History"]})]}),e.jsx(se,{value:"comments",className:"mt-4",children:e.jsx(ms,{trackId:s.id})}),e.jsx(se,{value:"history",className:"mt-4",children:e.jsxs(U,{variant:"default",children:[e.jsx("h3",{className:"text-lg font-heading font-bold text-white mb-4",children:"Version History"}),e.jsx(fs,{trackId:s.id,limit:20})]})})]}),s.waveform_path&&e.jsxs(U,{variant:"glass",children:[e.jsx("h2",{className:"text-xl font-heading font-bold text-white mb-4",children:"Waveform"}),e.jsx("img",{src:s.waveform_path,alt:"Waveform",className:"w-full h-32 object-contain"})]})]})]}),s&&e.jsx(ps,{open:g,onClose:()=>p(!1),trackId:s.id,trackTitle:s.title})]})}export{qs as TrackDetailPage};