import{q as k,s as F,_ as N,o as d,c as o,a as l,t as w,F as m,l as p,n as _,b as M,h as v,e as x,r as B,f as C,w as L}from"./index-cfekWYru.js";const T=[{val:"monday",title:"Lundi",id:1,index:0},{val:"tuesday",title:"Mardi",id:2,index:1},{val:"wednesday",title:"Mercredi",id:3,index:2},{val:"thursday",title:"Jeudi",id:4,index:3},{val:"friday",title:"Vendredi",id:5,index:4},{val:"saturday",title:"Samedi",id:6,index:5},{val:"sunday",title:"Dimanche",id:0,index:6}],y=F({shows:[],displayedDay:[]});function H(e,t){const a=T.find(s=>s.id===e.getDay()),i=y.displayedDay.find(s=>s.date.getFullYear()===e.getFullYear()&&s.date.getMonth()===e.getMonth()&&s.date.getDate()===e.getDate());i?i.shows=i.shows.concat(t):y.displayedDay=y.displayedDay.concat({date:e,dayName:(a==null?void 0:a.val)??"",dayTitle:(a==null?void 0:a.title)??"",id:(a==null?void 0:a.id)??-1,index:(a==null?void 0:a.index)??-1,shows:[t]})}function S(e){y.displayedDay=[];for(let t=0;t<e.length;t++){if(!e[t])continue;const a=new Date(Number(e[t].starts_at)),i=new Date(Number(e[t].ends_at)),s=c=>`${c.getFullYear()}-${c.getMonth()}-${c.getDate()}`;if(s(i)!==s(a)){const c=new Date(a);c.setHours(0,0,0,0);const r=new Date(i);r.setHours(0,0,0,0);for(let u=new Date(c);u<=r;u.setDate(u.getDate()+1)){const g=Object.assign({},e[t]);if(s(u)===s(a))a.setHours(23,59,0,0),g.ends_at=a.getTime().toString();else if(s(u)===s(i))g.ends_at=i.getTime().toString(),i.setHours(0,0,0,0),g.starts_at=i.getTime().toString();else{const D=new Date(u);D.setHours(0,0,0,0);const h=new Date(u);h.setHours(23,59,0,0),g.starts_at=D.getTime().toString(),g.ends_at=h.getTime().toString()}H(new Date(u),g)}}else H(new Date(a),e[t])}}async function P(e,t,a){S([]),e||(e=new Date);const i=e;let s=new Date(i.getTime()+10080*60*1e3);t&&t.length>0&&(s=new Date(i.getTime()+365*24*60*60*1e3));try{const n=await a(i,s,t);if(y.shows=k(n),!y.shows||!y.shows[0]||!y.shows[0].starts_at)return;const c=new Date(Number(y.shows[0].starts_at)).getTime();if(i.getTime()>c||s.getTime()<c)return;S(y.shows)}catch(n){console.error("Failed to fetch calendar",n),y.shows=[]}}const b=[{val:"monday",title:"Lundi",id:1,index:0},{val:"tuesday",title:"Mardi",id:2,index:1},{val:"wednesday",title:"Mercredi",id:3,index:2},{val:"thursday",title:"Jeudi",id:4,index:3},{val:"friday",title:"Vendredi",id:5,index:4},{val:"saturday",title:"Samedi",id:6,index:5},{val:"sunday",title:"Dimanche",id:0,index:6}],Y={name:"CalendarWeek",props:{date:{type:Date,default:null},querySearch:{type:String,default:""},title:{type:String,default:null}},data(){return{weekHeaderHeight:0,PX_PER_HOUR:64,isLoading:!1,shows:[],displayedDay:[]}},computed:{activeDays(){return this.displayedDay.map(e=>({...b.find(a=>a.id===e.id),date:e.date,hasShows:!0})).sort((e,t)=>e.index-t.index)},occupiedHours(){if(!this.shows||!this.shows.length)return new Set;const e=new Set;return this.shows.forEach(t=>{const a=new Date(Number(t.starts_at)),i=new Date(Number(t.ends_at)),s=a.getHours()*60,n=i.getHours()*60+i.getMinutes();if(`${i.getFullYear()}-${i.getMonth()}-${i.getDate()}`!=`${a.getFullYear()}-${a.getMonth()}-${a.getDate()}`){for(let r=s;r<1440;r+=60)e.add(r);for(let r=0;r<n;r+=60)e.add(r)}else for(let r=s;r<n;r+=60)e.add(r)}),e},hourBlocks(){const e=Array.from(this.occupiedHours).sort((s,n)=>s-n);if(!e.length)return[];const t=[];let a=e[0],i=e[0];for(let s=1;s<e.length;s++)e[s]-i>60&&(t.push({startMins:a,endMins:i+60}),a=e[s]),i=e[s];return t.push({startMins:a,endMins:i+60}),t},gapDividerTops(){const a=[];let i=this.weekHeaderHeight;for(let s=0;s<this.hourBlocks.length;s++)s>0&&(a.push(i),i+=8),i+=this.getContainerHeightForBlock(this.hourBlocks[s])+20;return a}},watch:{date(){this.getCalendar()},querySearch(){this.getCalendar()}},methods:{async getCalendar(){this.isLoading=!0;try{await P(this.date,this.querySearch,this.getGoogleCalendar),this.shows=y.shows,this.displayedDay=y.displayedDay}finally{this.isLoading=!1}},getContainerHeightForBlock(e){return(e.endMins-e.startMins)/60*this.PX_PER_HOUR},getHourLabelsForBlock(e){const t=e.endMins-e.startMins,a=this.getContainerHeightForBlock(e),i=[];for(let s=e.startMins;s<=e.endMins;s+=60){const n=Math.floor(s/60)%24,c=t>0?(s-e.startMins)/t*a:0;i.push({hour:n,label:String(n).padStart(2,"0")+":00",topPx:c})}return i},getShowsForDayInBlock(e,t){if(!(e!=null&&e.date))return[];const a=this.displayedDay.find(n=>n.date.getFullYear()===e.date.getFullYear()&&n.date.getMonth()===e.date.getMonth()&&n.date.getDate()===e.date.getDate());if(!a)return[];const i=t.endMins-t.startMins,s=this.getContainerHeightForBlock(t);return a.shows.filter(n=>{const c=new Date(Number(n.starts_at)).getHours()*60+new Date(Number(n.starts_at)).getMinutes(),r=new Date(Number(n.ends_at)).getHours()*60+new Date(Number(n.ends_at)).getMinutes();return c<t.endMins&&r>t.startMins}).map(n=>{const c=new Date(Number(n.starts_at)).getHours()*60+new Date(Number(n.starts_at)).getMinutes(),r=new Date(Number(n.ends_at)).getHours()*60+new Date(Number(n.ends_at)).getMinutes(),u=Math.max(c,t.startMins),g=Math.min(r,t.endMins),D=(u-t.startMins)/i*s+1,h=(g-u)/i*s-2;return{...n,topPx:D,heightPx:Math.max(h,22)}})}},updated(){var t;const e=(t=this.$refs.weekHeader)==null?void 0:t.clientHeight;e&&e!==this.weekHeaderHeight&&(this.weekHeaderHeight=e)}},E={key:0,class:"wrapper"},A={class:"title"},O={class:"week-scroll"},R={ref:"weekHeader",class:"week-header"},j={key:0,class:"day-date"},q={key:0,class:"time-gap-placeholder"},V={class:"week-body"},G={class:"time-column-wrapper"},z={class:"show-name"},I={key:0,class:"show-dj"},J={class:"genres-list"},U={key:0,class:"no-shows"};function W(e,t,a,i,s,n){const c=B("router-link");return d(),o(m,null,[s.shows.length>0&&!s.isLoading?(d(),o("div",E,[l("h2",A,w(a.title),1),l("section",{class:"week",style:_({"--day-count":n.activeDays.length})},[(d(!0),o(m,null,p(n.gapDividerTops,(r,u)=>(d(),o("div",{key:`gap-overlay-${u}`,class:"time-gap-divider",style:_({top:r+"px"})},null,4))),128)),l("div",O,[l("div",R,[t[0]||(t[0]=l("div",{class:"time-header-cell"},null,-1)),(d(!0),o(m,null,p(n.activeDays,r=>{var u;return d(),o("div",{key:`header-${(u=r.date)==null?void 0:u.toISOString()}`,class:"day-header"},[x(w(r.title)+" ",1),r.date?(d(),o("div",j,w(r.date.toLocaleDateString("fr-FR")),1)):M("",!0)])}),128))],512),(d(!0),o(m,null,p(n.hourBlocks,(r,u)=>(d(),o(m,{key:`block-${r.startMins}`},[u>0?(d(),o("div",q)):M("",!0),l("div",V,[l("div",G,[l("div",{class:"time-column",style:_({height:n.getContainerHeightForBlock(r)+"px"})},[(d(!0),o(m,null,p(n.getHourLabelsForBlock(r),g=>(d(),o("div",{key:`${r.startMins}-${g.hour}`,class:"hour-label",style:_({top:g.topPx+"px"})},w(g.label),5))),128))],4)]),(d(!0),o(m,null,p(n.activeDays,g=>{var D;return d(),o("div",{key:`col-${(D=g.date)==null?void 0:D.toISOString()}-${r.startMins}`,class:"day-column",style:_({height:n.getContainerHeightForBlock(r)+"px"})},[(d(!0),o(m,null,p(n.getHourLabelsForBlock(r),h=>(d(),o("div",{key:`sep-${r.startMins}-${h.hour}`,class:"hour-separator",style:_({top:h.topPx+"px"})},null,4))),128)),(d(!0),o(m,null,p(n.getShowsForDayInBlock(g,r),h=>(d(),o("div",{key:h.id+"-"+r.startMins+(h.isNextDaySegment?"-next":""),class:v(["show-block",{"show-block--next-day":h.isNextDaySegment}]),style:_({top:h.topPx+"px",height:h.heightPx+"px"})},[l("div",z,w(h.name),1),h.dj&&h.dj.length?(d(),o("div",I,w(h.dj),1)):M("",!0),l("div",J,[(d(!0),o(m,null,p(h.genres,f=>(d(),o("span",{class:"genre",key:f},[C(c,{to:{path:"/podcasts",query:{q:"#"+(f==null?void 0:f.toLowerCase())}}},{default:L(()=>[x("#"+w(f),1)]),_:2},1032,["to"])]))),128))])],6))),128))],4)}),128))])],64))),128))])],4)])):M("",!0),s.isLoading||a.date&&s.shows.length===0?(d(),o("section",{key:1,class:v(["week wrapper",{"calendar-loading":s.isLoading}]),style:{"--day-count":1}},[t[3]||(t[3]=l("div",{class:"week-header"},[l("div",{class:"time-header-cell"}),l("div",{class:"day-header"},[x(" "),l("br"),l("br")])],-1)),l("div",{class:v(["week-body week-body--placeholder",{"calendar-loading__body":s.isLoading}])},[t[2]||(t[2]=l("div",{class:"time-column-wrapper"},[l("div",{class:"time-column"},[l("div",{class:"hour-label"},"   ")])],-1)),a.date&&s.shows.length===0&&!s.isLoading?(d(),o("section",U,[...t[1]||(t[1]=[l("h2",null,"Aucune émission programmée pour cette semaine.",-1),l("p",null,"La programmation zest radio s'étend généralement de début octobre (après le soundclash) jusqu'à la fête de la musique.",-1)])])):M("",!0)],2)],2)):M("",!0)],64)}const $=N(Y,[["render",W],["__scopeId","data-v-75f59581"]]);export{$ as C};