1import{u as w}from"./xkIdePKz.js";import{f as E,u as I,g as N,i as R}from"./JG84WnTm.js";import{u as V,_ as q}from"./DuqRHUAX.js";import{d as k,w as b,l as u,j as m,m as e,p,x as h,u as S,F as C,y as A,B as M,D as J,z,r as f,f as F,v as T,J as B,q as j,H as O,L as Y,M as U,k as K}from"./sq8n79Zx.js";import"./D6ltPAd4.js";import"./CGWH6Nkj.js";import"./CuUVsRXu.js";const G={class:"bg-white rounded-xl p-6 shadow-sm"},Q={class:"flex items-center justify-between mb-6"},X={class:"flex items-center space-x-2"},Z={class:"relative group"},ee={class:"flex items-center space-x-2 bg-green-100 text-green-700 px-3 py-1 rounded-full text-sm font-semibold"},te={class:"relative"},se={key:0,class:"ml-8 flex items-center justify-center h-32"},ae={key:1,class:"ml-8 flex items-end h-32 space-x-3 mb-4"},le={key:0,class:"absolute -top-8 left-1/2 transform -translate-x-1/2 z-10"},re={class:"bg-white shadow-lg px-2 py-1 rounded-lg text-green-600 text-xs font-bold border whitespace-nowrap"},ne={class:"mt-2 text-xs text-gray-500 font-medium"},oe={__name:"TeacherWeeklyActivity",setup(o){const i=I("TeacherWeeklyActivity"),{userProfile:n}=w(),t=f([{label:"Lun",value:0},{label:"Mar",value:0},{label:"Mer",value:0},{label:"Jeu",value:0},{label:"Ven",value:0},{label:"Sam",value:0},{label:"Dim",value:0}]),l=f(!0),r=F(()=>{const g=new Date,d=g.getDate().toString().padStart(2,"0"),y=(g.getMonth()+1).toString().padStart(2,"0"),x=`${d}/${y}`;return t.value.findIndex(_=>_.label===x)}),{formatTime:s,averageHours:a,barHeight:v}=V(t),c=async()=>{const g=n.value?.user?.id;if(g){l.value=!0;try{const d=await $fetch("/api/posthog-view.get.teacher-weekly-activity",{params:{teacher_id:g}});d.results&&(t.value=d.results.weeklyActivity)}catch(d){i.error("Erreur lors du chargement de l'activité hebdomadaire:",d)}finally{l.value=!1}}};return k(()=>{c()}),b(()=>n.value?.user?.id,g=>{g&&c()}),(g,d)=>{const y=E;return u(),m("div",G,[e("div",Q,[e("div",X,[d[1]||(d[1]=e("h2",{class:"text-lg font-bold text-gray-800"},"Activité hebdomadaire Moyenne",-1)),e("div",Z,[p(y,{name:"ph:info",class:"w-4 h-4 text-gray-400 cursor-help"}),d[0]||(d[0]=e("div",{class:"absolute left-0 bottom-full mb-2 w-64 p-3 bg-gray-900 text-white text-xs rounded-lg shadow-lg opacity-0 invisible group-hover:opacity-100 group-hover:visible transition-all duration-200 z-10"},[e("p",{class:"leading-relaxed"},"Moyenne du temps de travail quotidien sur les 7 derniers jours, calculée pour tous les élèves du groupe."),e("div",{class:"absolute top-full left-4 w-0 h-0 border-l-4 border-r-4 border-t-4 border-transparent border-t-gray-900"})],-1))])]),e("div",ee,[d[2]||(d[2]=e("i",{class:"i-ph-clock text-green-600"},null,-1)),e("span",null,h(S(a)),1)])]),e("div",te,[d[4]||(d[4]=e("div",{class:"absolute left-0 top-0 bottom-0 flex flex-col justify-between text-xs text-gray-400 pr-2"},[e("span",null,"3H"),e("span",null,"2H"),e("span",null,"1H"),e("span",null,"30min"),e("span",null,"15min")],-1)),l.value?(u(),m("div",se,[...d[3]||(d[3]=[e("div",{class:"animate-spin rounded-full h-8 w-8 border-b-2 border-green-500"},null,-1)])])):(u(),m("div",ae,[(u(!0),m(C,null,A(t.value,(x,_)=>(u(),m("div",{key:x.label,class:"flex flex-col items-center flex-1 relative"},[_===r.value?(u(),m("div",le,[e("div",re,h(x.label)+" "+h(S(s)(x.value)),1)])):M("",!0),e("div",{class:z(["w-8 rounded-t transition-all duration-200",_===r.value?"bg-green-500":"bg-green-200"]),style:J({height:`${S(v)(x.value)}px`})},null,6),e("span",ne,h(x.label),1)]))),128))]))])])}}},ie=T({__name:"TeacherWeeklyStatsChart",props:{embedded:{type:Boolean}},setup(o){const i=I("TeacherWeeklyStatsChart"),{userProfile:n}=w(),t=f([]),l=f(!1),r=async()=>{const s=n.value?.user?.id;if(s){l.value=!0;try{const a=await $fetch("/api/posthog-view.get.teacher-weekly-stats",{params:{teacher_id:s}});t.value=a?.results?.weeks??[]}catch(a){i.error("Erreur lors du chargement des stats hebdomadaires:",a),t.value=[]}finally{l.value=!1}}};return k(r),b(()=>n.value?.user?.id,()=>{n.value?.user?.id&&r()}),(s,a)=>(u(),B(q,{weeks:t.value,loading:l.value,embedded:o.embedded,"empty-message":"Aucune donnée disponible."},null,8,["weeks","loading","embedded"]))}}),de={class:"bg-white rounded-xl p-6 shadow-sm"},ce={class:"flex items-center justify-between mb-4"},ue={key:0,class:"animate-spin rounded-full h-4 w-4 border-b-2 border-cyan-500"}
1,ve={class:"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-5 gap-4"},me={class:"flex items-center space-x-3"},ge={class:"bg-purple-100 p-3 rounded-full"},pe={class:"font-bold text-gray-800 text-lg"},fe={class:"flex items-center space-x-3"},he={class:"bg-red-100 p-3 rounded-full"},xe={class:"font-bold text-gray-800 text-lg"},be={class:"flex items-center space-x-3"},ye={class:"bg-yellow-100 p-3 rounded-full"},_e={class:"font-bold text-gray-800 text-lg"},we={class:"flex items-center space-x-3"},ke={class:"bg-emerald-100 p-3 rounded-full"},De={class:"font-bold text-gray-800 text-lg"},$e={class:"flex items-center space-x-3"},Se={class:"bg-blue-100 p-3 rounded-full"},Ce={class:"font-bold text-gray-800 text-lg"},Ae=T({__name:"TeacherClassKPI",setup(o){const{userProfile:i}=w(),n=f(!1),t=f({coursesFollowed:0,quizzesCompleted:0,exercisesCompleted:0,flashcardsCompleted:0,chatsCompleted:0}),l=async()=>{const r=i.value?.user?.id;if(r){n.value=!0;try{const s=await $fetch("/api/posthog-view.get.teacher-class-stats",{params:{teacher_id:r}});s?.results?.stats&&(t.value=s.results.stats)}catch{}finally{n.value=!1}}};return k(()=>{l()}),b(()=>i.value?.user?.id,r=>{r&&l()}),(r,s)=>{const a=E;return u(),m("div",de,[e("div",ce,[s[0]||(s[0]=e("h3",{class:"text-base md:text-lg font-semibold text-gray-900"},"Activité totale",-1)),n.value?(u(),m("div",ue)):M("",!0)]),e("div",ve,[e("div",me,[e("div",ge,[p(a,{name:"ph:book-open",class:"w-6 h-6 text-purple-600"})]),e("div",null,[s[1]||(s[1]=e("div",{class:"text-xs text-gray-500 font-medium"},"Cours suivis",-1)),e("div",pe,h(t.value.coursesFollowed),1)])]),e("div",fe,[e("div",he,[p(a,{name:"ph:check-circle",class:"w-6 h-6 text-red-600"})]),e("div",null,[s[2]||(s[2]=e("div",{class:"text-xs text-gray-500 font-medium"},"Quiz résolus",-1)),e("div",xe,h(t.value.quizzesCompleted),1)])]),e("div",be,[e("div",ye,[p(a,{name:"ph:clipboard-text",class:"w-6 h-6 text-yellow-600"})]),e("div",null,[s[3]||(s[3]=e("div",{class:"text-xs text-gray-500 font-medium"},"Exercices résolus",-1)),e("div",_e,h(t.value.exercisesCompleted),1)])]),e("div",we,[e("div",ke,[p(a,{name:"ph:cards-three",class:"w-6 h-6 text-emerald-600"})]),e("div",null,[s[4]||(s[4]=e("div",{class:"text-xs text-gray-500 font-medium"},"Flashcards réalisées",-1)),e("div",De,h(t.value.flashcardsCompleted),1)])]),e("div",$e,[e("div",Se,[p(a,{name:"ph:chats-circle",class:"w-6 h-6 text-blue-600"})]),e("div",null,[s[5]||(s[5]=e("div",{class:"text-xs text-gray-500 font-medium"},"Chats réalisés",-1)),e("div",Ce,h(t.value.chatsCompleted),1)])])]),p(ie,{embedded:""})])}}}),Ie={class:"mt-6 pt-6 border-t border-gray-200"},Me={__name:"TeacherBadges",setup(o){const i=I("TeacherBadges"),{userProfile:n}=w(),t=f({bronze:0,argent:0,or:0}),l=f(!0),r=async()=>{const s=n.value?.user?.id;if(s){l.value=!0;try{const a=await $fetch("/api/posthog-view.get.teacher-badges",{params:{teacher_id:s}});a.results&&(t.value=a.results)}catch(a){i.error("Erreur lors du chargement des badges:",a)}finally{l.value=!1}}};return k(()=>{r()}),b(()=>n.value?.user?.id,s=>{s&&r()}),(s,a)=>{const v=j("BadgeExplanations"),c=j("BadgesUnlockedPanel");return u(),B(c,{badges:t.value,loading:l.value},{default:O(()=>[e("div",Ie,[p(v)])]),_:1},8,["badges","loading"])}}},Te=["Lu","Ma","Me","Je","Ve","Sa","Di"];function H(o){const i=new Date(o),n=i.getDay()||7;return n!==1&&i.setDate(i.getDate()-(n-1)),i.setHours(0,0,0,0),i}function W(o,i=new Date,n=!1){const t=new Date(i);t.setHours(0,0,0,0);let l,r;return o==="hebdomadaire"?(l=H(t),r=new Date(l),r.setDate(l.getDate()+6)):o==="mensuelle"?(l=new Date(t.getFullYear(),t.getMonth(),1),r=new Date(t.getFullYear(),t.getMonth()+1,0)):(l=new Date(t.getFullYear(),0,1),r=new Date(t.getFullYear(),11,31)),n&&r>t&&(r=t),{start:l,end:r}}function Ee(o,i,n,t,l,r){const s=new Date(o);s.setDate(o.getDate()+i);const a=s.toISOString().slice(0,10),v=s>l;if(!(s>=n&&s<=t))return{date:null,activity:0,dayNumber:s.getDate(),isInRange:!1,isFuture:!0};const g=r.find(d=>d.date===a);return{date:a,activity:g?g.activity:0,dayNumber:s.getDate(),isInRange:!0,isFuture:v}}function Be(o,i){const n=Math.ceil((i.getTime()-o.getTime())/6048e5);if(n<=12)return o;const t=n-12,l=new Date(o);return l.setDate(l.getDate()+t*7),l}function je(o,i,n=new Date){const t=new Date(n);t.setHours(0,0,0,0);let{start:l,end:r}=W(o,t,!0);o==="annuelle"&&(l=Be(l,r));const s=[];let a=H(l);for(;a<=r;){const v=Array.from({length:7},(c,g)=>Ee(a,g,l,r,t,i));s.push({weekStart:new Date(a),days:v}),a.setDate(a.getDate()+7)}return s}function ze(o,i){return i?"bg-gray-50 border border-gray-200 opacity-50":o===0?"bg-gray-200":o===1?"bg-green-300":o===2?"bg-green-400":o===3?"bg-green-500":"bg-green-600"}const Fe=["Jan","Fév","Mar","Avr","Mai","Juin","Juil","Août","Sep","Oct","Nov","Déc"];function He(o){return`${o.getDate()} ${Fe[o.getMonth()]}`}const We={class:"space-y-3 md:space-y-4 overflow-x-auto"},Le={class:"overflow-hidden"},Pe={class:"grid grid-cols-8 gap-2 text-xs text-gray-500 min-w-fit"},Ne={class:"text-xs text-gray-600 font-medium pr-1 md:pr-2 w-8 md:w-auto truncate"},Re=["title"],Ve={key:0,class:"absolute -top-1 -right-1 text-[8px] text-white font-bold bg-green-600 rounded-full w-4 h-4 flex items-center justify-center"},qe=T({__name:"TeacherActivityCalendarGrid",props:{weeks:{},weekdayLabels:{}},setup(o){function i(t){return He(t)}function n(t,l){return ze(t,l)}return(t,l)=>(u(),m("div",We,[e("div",Le,[e("div",Pe,[l[0]||(l[0]=e("div",{class:"w-8 md:w-auto"},null,-1)),(u(!0),m(C,null,A(o.weekdayLabels,r=>(u(),m("div",{key:r,class:"text-center"},h(r),1))),128))]),(u(!0),m(C,null,A(o.weeks,(r,s)=>(u(),m("div",{key:s,class:"grid grid-cols-8 gap-2 items-center min-w-fit mb-2"},[e("div",Ne,h(i(r.weekStart)),1),(u(!0),m(C,null,A(r.days,(a,v)=>(u(),m("div",{key:v,class:z(["w-4 h-4 md:w-5 md:h-5 rounded-sm transition-all duration-200 hover:brightness-110 hover:shadow-sm relative",n(a.activity,a.isFuture)]),title:a&&a.isInRange?`${a.date} - ${a.activity} élève(s) actif(s)`:""},[a&&a.isInRange&&a.activity>0?(u(),m("span",Ve,h(a.activity),1)):M("",!0)],10,Re))),128))]))),128))])]))}}),Je={class:"bg-white rounded-xl shadow-sm p-4 md:p-6"},Oe={class:"flex flex-col sm:flex-row sm:items-center justify-between mb-4 md:mb-6 gap-2"},Ye={class:"flex items-center space-x-2"},Ue={class:"relative group"},Ke={key:0,class:"mb-4 p-3 bg-blue-50 border border-blue-200 rounded-lg"},Ge={class:"flex items-start"},Qe={key:1,class:"flex items-center justify-center h-40"},Xe=T({__name:"TeacherActivityCalendar",setup(o){const i=I("TeacherActivityCalendar"),{userProfile:n}=w(),t=f("hebdomadaire"),l=f(!0),r=f([]),s=async()=>{const v=n.value?.user?.id;if(!v){l.value=!1,r.value=[];return}l.value=!0;try{const c=await $fetch("/api/posthog-view.get.teacher-assiduity",{params:{teacher_id:v,period:t.value}});if(c.results){const g=[],d=c.dates||[],y=new Map;d.forEach(D=>{y.set(D.date,D.value)});const x=new Date,{start:_,end:L}=W(t.value,x),$=new Date(_);for(;$<=L;){const D=$.toISOString().slice(0,10),P=y.get(D)||0;g.push({date:D,activity:P}),$.setDate($.getDate()+1)}r.value=g}}catch(c){i.error("Erreur lors du chargement des données d'assiduité:",c),r.value=[]}finally{l.value=!1}},a=F(()=>je(t.value,r.value));return k(()=>{s()}),b(t,()=>{s()}),b(()=>n.value?.user?.id,v=>{v&&s()}),(v,c)=>{const g=E;return u(),m("div",Je,[e("div",Oe,[e("div",Ye,[c[2]||(c[2]=e("h3",{class:"text-base md:text-lg font-semibold text-gray-900"},"Assiduité des élèves",-1)),e("div",Ue,[p(g,{name:"ph:info",class:"w-4 h-4 text-gray-400 cursor-help"}),c[1]||(c[1]=e("div",{class:"absolute left-0 bottom-full mb-2 w-64 p-3 bg-gray-900 text-white text-xs rounded-lg shadow-lg op
1acity-0 invisible group-hover:opacity-100 group-hover:visible transition-all duration-200 z-10"},[e("p",null,"Nombre d'élèves actifs par jour. L'intensité de la couleur indique le nombre d'élèves qui ont travaillé ce jour-là .")],-1))])]),Y(e("select",{"onUpdate:modelValue":c[0]||(c[0]=d=>t.value=d),class:"px-2 md:px-3 py-1 border border-gray-200 rounded-md text-xs md:text-sm focus:outline-none focus:ring-1 focus:ring-primary-500 bg-white"},[...c[3]||(c[3]=[e("option",{value:"hebdomadaire"},"Cette semaine",-1),e("option",{value:"mensuelle"},"Ce mois",-1),e("option",{value:"annuelle"},"Cette année",-1)])],512),[[U,t.value]])]),t.value==="annuelle"?(u(),m("div",Ke,[e("div",Ge,[p(g,{name:"ph:info",class:"w-4 h-4 text-blue-500 mr-2 mt-0.5 flex-shrink-0"}),c[4]||(c[4]=e("p",{class:"text-xs text-blue-700"}," Affichage limité aux 12 dernières semaines de l'année pour une meilleure lisibilité. ",-1))])])):M("",!0),l.value?(u(),m("div",Qe,[p(g,{name:"ph:spinner",class:"h-8 w-8 animate-spin text-cyan-500"})])):(u(),B(qe,{key:2,weeks:a.value,"weekday-labels":S(Te)},null,8,["weeks","weekday-labels"])),c[5]||(c[5]=K('<div class="flex items-center justify-between mt-4 md:mt-6 pt-4 md:pt-6 border-t border-gray-100 gap-3 sm:gap-0"><div class="text-xs md:text-sm text-gray-600">Moins d'élèves</div><div class="flex space-x-1"><div class="w-2 h-2 md:w-3 md:h-3 bg-gray-200 rounded-sm"></div><div class="w-2 h-2 md:w-3 md:h-3 bg-green-300 rounded-sm"></div><div class="w-2 h-2 md:w-3 md:h-3 bg-green-400 rounded-sm"></div><div class="w-2 h-2 md:w-3 md:h-3 bg-green-500 rounded-sm"></div><div class="w-2 h-2 md:w-3 md:h-3 bg-green-600 rounded-sm"></div></div><div class="text-xs md:text-sm text-gray-600">Plus d'élèves</div></div>',1))])}}}),Ze={key:0,class:"flex items-center justify-center min-h-[400px]"},et={key:1,class:"space-y-6"},tt={class:"grid grid-cols-1 lg:grid-cols-2 gap-6"},st={class:"space-y-6"},at={class:"space-y-6"},ut={__name:"index",setup(o){N({title:"Dashboard Enseignant - Stewdy",description:"Interface de gestion pédagogique pour les enseignants"});const i=f("-"),n=f("-"),t=f(!0),{userProfile:l}=w(),r=R();async function s(){const a=l.value?.user?.id;if(a){t.value=!0;try{const{data:v}=await r.auth.getSession(),c=v.session?.access_token;if(!c)throw new Error("Session expirée");const d=await(await fetch(`/api/teachers/${a}/details`,{credentials:"include",headers:{Authorization:`Bearer ${c}`}})).json();d.success&&d.data&&(i.value=d.data.total_students??0,n.value=d.data.total_classes??0)}catch{i.value="-",n.value="-"}finally{t.value=!1}}}return k(async()=>{await s()}),b(()=>l.value?.user?.id,a=>{a&&s()}),(a,v)=>(u(),m("div",null,[t.value?(u(),m("div",Ze,[...v[0]||(v[0]=[e("div",{class:"text-center"},[e("div",{class:"animate-spin rounded-full h-12 w-12 border-b-2 border-green-500 mx-auto mb-4"}),e("p",{class:"text-gray-600"},"Chargement...")],-1)])])):(u(),m("div",et,[v[1]||(v[1]=e("div",{class:"flex flex-col sm:flex-row sm:items-center justify-between gap-4"},[e("div",null,[e("h1",{class:"text-2xl font-bold text-gray-900"},"Espace Enseignant"),e("p",{class:"text-gray-600 mt-1"},"Suivi et gestion de vos élèves")])],-1)),e("div",tt,[e("div",st,[p(Ae),p(oe)]),e("div",at,[p(Xe),p(Me)])])]))]))}};export{ut as default};
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.