1import{Q as Ut}from"./QSpinnerDots-CxlD9VAx.js";import{_ as pt,F as Ke,r as u,w as Qe,ai as Jt,o as Ge,I as ge,J as D,K as a,V as o,L as e,f as w,a4 as ee,Q as Fe,a8 as Ve,a0 as Z,a1 as G,N as T,a9 as Ze,ab as je,C as re,bx as L,Y as wt,Z as xt,b as xe,P as X,T as me,M as P,ac as St,U as We,R as Je,S as ft,aX as Pt,O as B,bv as Kt,by as Ot,bz as Zt,bi as Bt,bd as Gt,bA as ea,bB as ta,bC as Ft,h as He,aE as aa,bD as la,ad as gt,bE as he,B as Dt,a2 as bt,G as sa}from"./index-DmMWFTlW.js";import{Q as Tt,a as Ee,b as Lt,P as oa,c as ct,d as Qt}from"./browser-TY4IQH46.js";import{Q as zt,a as Ae,b as Ht,c as Pe}from"./QTabPanels-UnQC1cUG.js";import{Q as Le}from"./QPage-B13jEZvj.js";import{Q as Re,a as pe,b as Et}from"./QTable-WY2Tuy1f.js";import{Q as et}from"./QForm-BUKdhqQe.js";import{C as fe}from"./ClosePopup-CqSTItjh.js";import{u as tt}from"./use-quasar-DqtP9Las.js";import{Q as Se}from"./QSpace-DvkoovRP.js";import{Q as se}from"./QSelect-Cm7KAHFZ.js";import{Q as Xe}from"./QTooltip-BPpQxeoW.js";import{Q as Oe,a as Ne,b as na}from"./QItem-RvHevyvj.js";import{Q as mt}from"./QBadge-Ta7vVu-s.js";import{Q as Rt}from"./QList-zMztYSyu.js";import{Q as ua}from"./QInnerLoading-dtZQza8j.js";import{t as Ct}from"./terms-CBE4kpfH.js";import{c as vt}from"./cls-BNGTRSln.js";import"./years-C-ru8EGT.js";import{Q as $t,a as Vt}from"./QToolbar-WcVjyJUB.js";import{Q as lt}from"./QChip-Bw_0mvxH.js";import{E as qt}from"./jspdf.es.min-2MSynss7.js";import{Q as ia}from"./QCircularProgress-BizP_Q-o.js";import{e as ra}from"./export-file-BlQk-c_E.js";import{C as _t,r as da}from"./chart-BcxQAy-J.js";import"./jspdf.plugin.autotable-BpvYLMb1.js";import{r as yt}from"./rules-Cmr9vFm7.js";import{s as ca}from"./section-Ba_XDh3k.js";import"./format-DyQxkAtJ.js";import"./_commonjsHelpers-D6Ya60D-.js";import"./QResizeObserver-DbOjZLhN.js";import"./rtl-DFPa-2ov.js";import"./touch-BjYP5sR0.js";import"./selection-9CI4SQ0E.js";import"./use-render-cache-DLxPkVnQ.js";import"./QMarkupTable-CvRgMmbQ.js";import"./QMenu-B3LFZvpl.js";import"./position-engine-D1Iga1eY.js";const It=F=>(wt("data-v-3d049fe6"),F=F(),xt(),F),ma={class:"q-mb-lg"},pa=It(()=>o("div",{class:"text-h4"},"Subject Management",-1)),va={class:"row q-mb-md q-gutter-sm"},fa={class:"col-auto"},ga={class:"col text-right"},ba={class:"text-h6"},ya={class:"row q-col-gutter-md"},ha={class:"col-12"},_a={class:"col-12"},wa=It(()=>o("div",{class:"text-h6"},"Bulk Import Subjects",-1)),xa=It(()=>o("div",{class:"text-caption"}," CSV format: SubjectName,Class (Header row required) ",-1)),Sa={__name:"SubjectManage",setup(F){const v=tt(),j=Ke().getSchoolCode,A=u([]),S=u(!1),O=u(!1),R=u(!1),Q=u(""),k=u(!1),b=u(!1),C=u(!1),_=u(null),M=u(null),x=u({subjectId:null,subjectName:"",class:"",sc1:j}),q=u({sortBy:"subjectName",descending:!1,page:1,rowsPerPage:10,rowsNumber:0}),J=[{name:"subjectId",required:!0,label:"ID",align:"left",field:"subjectId",sortable:!0},{name:"subjectName",required:!0,label:"Subject Name",align:"left",field:"subjectName",sortable:!0},{name:"class",label:"Class/Grade",align:"left",field:"class",sortable:!0},{name:"actions",label:"Actions",align:"center",field:"actions",sortable:!1}],I=async()=>{var U,V;S.value=!0;try{const i=await L.get("/api/subject/subjects",{params:{sc1:j,searchTerm:Q.value,pageNumber:q.value.page,pageSize:q.value.rowsPerPage,sortBy:q.value.sortBy,sortOrder:q.value.descending?"desc":"asc"}});A.value=i.data,q.value.rowsNumber=i.data.length}catch(i){console.error("Failed to fetch subjects:",i),v.notify({type:"negative",message:"Failed to load subjects.",caption:((V=(U=i==null?void 0:i.response)==null?void 0:U.data)==null?void 0:V.message)||i.message})}finally{S.value=!1}},$=U=>{q.value=U.pagination,I()},H=U=>{x.value={...U},C.value=!0,k.value=!0},m=async()=>{var V,i;if(await M.value.validate()){O.value=!0;try{C.value?await L.put(`/api/subject/subjects/${x.value.subjectId}`,x.value):await L.post("/api/subject/subjects",x.value),v.notify({type:"positive",message:`Subject ${C.value?"updated":"created"} successfully.`}),k.value=!1,I()}catch(p){console.error("Save subject error:",p),v.notify({type:"negative",message:`Failed to ${C.value?"update":"create"} subject.`,caption:((i=(V=p==null?void 0:p.response)==null?void 0:V.data)==null?void 0:i.message)||p.message})}finally{O.value=!1}}},ae=U=>{v.dialog({title:"Confirm Delete",message:`Are you sure you want to delete subject <strong>${U.subjectName}</strong>?`,html:!0,cancel:!0,persistent:!0}).onOk(async()=>{var V,i;try{await L.delete(`/api/subject/subjects/${U.subjectId}`),v.notify({type:"positive",message:"Subject deleted successfully."}),I()}catch(p){console.error("Delete subject error:",p),v.notify({type:"negative",message:"Failed to delete subject.",caption:((i=(V=p==null?void 0:p.response)==null?void 0:V.data)==null?void 0:i.message)||p.message})}})},de=()=>{if(!_.value){v.notify({type:"warning",message:"Please select a file to import."});return}R.value=!0,oa.parse(_.value,{header:!0,skipEmptyLines:!0,complete:async U=>{var i,p;const V=U.data.map(d=>({subjectName:d.SubjectName||null,class:d.Class||null,sc1:j})).filter(d=>d.subjectName&&d.class);if(V.length===0){v.notify({type:"negative",message:"No valid subject data found in the CSV file.",caption:"Please check for c
1orrect headers: SubjectName, Class"}),R.value=!1;return}try{const d=await L.post("/api/subject/subjects/bulk",V);v.notify({type:"positive",message:`Successfully imported ${V.length} subjects.`}),I(),b.value=!1,_.value=null}catch(d){console.error("Bulk import error:",d),v.notify({type:"negative",message:"Failed to import subjects.",caption:((p=(i=d==null?void 0:d.response)==null?void 0:i.data)==null?void 0:p.message)||d.message})}finally{R.value=!1}},error:U=>{console.error("CSV Parsing Error:",U),v.notify({type:"negative",message:"Failed to parse CSV file.",caption:U.message}),R.value=!1}})},be=async()=>{try{const U=await L.get("/api/subject/subjects/export-csv",{params:{sc1:j},responseType:"blob"}),V=window.URL.createObjectURL(new Blob([U.data])),i=document.createElement("a");i.href=V,i.setAttribute("download",`subjects_export_${new Date().toISOString().slice(0,10)}.csv`),document.body.appendChild(i),i.click(),document.body.removeChild(i),window.URL.revokeObjectURL(V)}catch(U){console.error("Export to CSV error:",U),v.notify({type:"negative",message:"Failed to export subjects.",caption:U.message})}},ye=()=>{x.value={subjectId:null,subjectName:"",class:"",sc1:j},C.value=!1};return Qe(Q,Jt(()=>{q.value.page=1,I()},500)),Ge(()=>{I()}),(U,V)=>(D(),ge(Le,{class:"q-pa-md"},{default:a(()=>[o("div",ma,[pa,e(Tt,{class:"q-mt-sm"},{default:a(()=>[e(Ee,{label:"Dashboard",icon:"home",to:"/"}),e(Ee,{label:"Exam System"}),e(Ee,{label:"Subject Management"})]),_:1})]),o("div",va,[o("div",fa,[e(w,{color:"primary",icon:"add",label:"Add Subject",onClick:V[0]||(V[0]=i=>k.value=!0)}),e(w,{color:"secondary",icon:"cloud_upload",label:"Bulk Import",class:"q-ml-sm",onClick:V[1]||(V[1]=i=>b.value=!0)}),e(w,{color:"accent",icon:"file_download",label:"Export CSV",class:"q-ml-sm",onClick:be})]),o("div",ga,[e(ee,{modelValue:Q.value,"onUpdate:modelValue":V[2]||(V[2]=i=>Q.value=i),dense:"",outlined:"",placeholder:"Search subjects...",style:{width:"300px",display:"inline-block"}},{append:a(()=>[e(Fe,{name:"search"})]),_:1},8,["modelValue"])])]),e(Re,{rows:A.value,columns:J,loading:S.value,pagination:q.value,"onUpdate:pagination":V[3]||(V[3]=i=>q.value=i),"rows-per-page-options":[10,20,50,100],"row-key":"subjectId",class:"shadow-1",onRequest:$},{"body-cell-actions":a(i=>[e(pe,{props:i,class:"q-gutter-x-sm"},{default:a(()=>[e(w,{flat:"",dense:"",icon:"edit",color:"primary",onClick:p=>H(i.row)},null,8,["onClick"]),e(w,{flat:"",dense:"",icon:"delete",color:"negative",onClick:p=>ae(i.row)},null,8,["onClick"])]),_:2},1032,["props"])]),_:1},8,["rows","loading","pagination"]),e(Ve,{modelValue:k.value,"onUpdate:modelValue":V[6]||(V[6]=i=>k.value=i),persistent:"",onHide:ye},{default:a(()=>[e(Z,{style:{"min-width":"500px"}},{default:a(()=>[e(G,null,{default:a(()=>[o("div",ba,T(C.value?"Edit Subject":"Add New Subject"),1)]),_:1}),e(G,{class:"q-pt-none"},{default:a(()=>[e(et,{onSubmit:Ze(m,["prevent"]),ref_key:"subjectForm",ref:M},{default:a(()=>[o("div",ya,[o("div",ha,[e(ee,{modelValue:x.value.subjectName,"onUpdate:modelValue":V[4]||(V[4]=i=>x.value.subjectName=i),label:"Subject Name",outlined:"",dense:"",rules:[i=>!!i||"Required"]},null,8,["modelValue","rules"])]),o("div",_a,[e(ee,{modelValue:x.value.class,"onUpdate:modelValue":V[5]||(V[5]=i=>x.value.class=i),label:"Class/Grade /Please Input Like Example. One, Eleven.",outlined:"",dense:"",rules:[i=>!!i||"Required"]},null,8,["modelValue","rules"])])])]),_:1},8,["onSubmit"])]),_:1}),e(je,{align:"right"},{default:a(()=>[re(e(w,{flat:"",label:"Cancel",color:"negative"},null,512),[[fe]]),e(w,{flat:"",label:"Save",color:"primary",onClick:m,loading:O.value},null,8,["loading"])]),_:1})]),_:1})]),_:1},8,["modelValue"]),e(Ve,{modelValue:b.value,"onUpdate:modelValue":V[8]||(V[8]=i=>b.value=i),persistent:""},{default:a(()=>[e(Z,{style:{"min-width":"600px","max-width":"800px"}},{default:a(()=>[e(G,null,{default:a(()=>[wa]),_:1}),e(G,null,{default:a(()=>[e(Lt,{modelValue:_.value,"onUpdate:modelValue":V[7]||(V[7]=i=>_.value=i),label:"Upload CSV File",accept:".csv",outlined:"",dense:"",class:"q-mb-md"},{prepend:a(()=>[e(Fe,{name:"attach_file"})]),_:1},8,["modelValue"]),xa]),_:1}),e(je,{align:"right"},{default:a(()=>[re(e(w,{flat:"",label:"Cancel",color:"negative"},null,512),[[fe]]),e(w,{flat:"",label:"Import",color:"primary",onClick:de,loading:R.value,disable:!_.value},null,8,["loading","disable"])]),_:1})]),_:1})]),_:1},8,["modelValue"])]),_:1}))}},Ta=pt(Sa,[["__scopeId","data-v-3d049fe6"]]),st=F=>(wt("data-v-37af87c7"),F=F(),xt(),F),Ca={class:"q-mb-md"},$a=st(()=>o("div",{class:"text-h4"},"Question Management",-1)),Va={class:"row q-col-gutter-md"},qa={class:"col-12 col-md-8 col-lg-9"},Ia={class:"row q-gutter-md items-start"},ja={key:0,class:"col-12 col-md-auto row q-gutter-sm items-center"},ka={key:0},Na={class:"text-pre-wrap"},Aa={class:"text-caption text-grey"},Pa={key:1},Fa=st(()=>o("div",{class:"text-h6 q-mt-md"},"Select a Class & Subject",-1)),Da=st(()=>o("div",{class:"text-grey-8"}," Choose a category from the right panel to begin. ",-1)),Qa={class:"col-12 col-md-4 col-lg-3"},Ea={class:"row items-center no-wrap"},Ra={class:"col"},Ma={class:"text-h6"},Ua={key:0,class:"col-auto"},Oa={class:"text-h6 text-primary text-weight-bold"},Ba=st(()=>o("div",{class:"text-subtitle2 text-grey-8"}," Total Questions in Bank ",-1)),Ga={class:"text-h6"},La={class:"row q-col-gutter-md"},za={class:"col-12 col-md-6"},Ha={class:"col-12 col-md-6"},Ya={class:"col-12 col-md-6"},Wa={class:"col-12 col-md-6"},Xa={class:"col-12 col-md-6"},Ja={class:"col-12 col-md-6"},Ka={class:"col-12"},Za={class:"col-12"},el={key:0,class:"col-12"},tl=st(()=>o("div",{class:"text-h6 q-mb-sm"},"Options",-1)),al={class:"row q-col-gutter-sm items-center"},ll={class:"col-2"},sl={class:"col-5"},ol={class:"col-3"},nl={class:"col-2 text-right"},ul={key:1,class:"col-12"},il={key:2,class:"col-12"},rl={key:3,class:"col-12"},dl={__name:"QuestionManagement",setup(F){const v=tt(),E=Ke(),j=E.getSchoolCode,A=u("classes"),S=u(!1),O=u([]),R=u([]),Q=u(null),k=u(null),b=u(0),C=u([]),_=u(!1),M=u({examTerm:null,questionType:null}),x=u({sortBy:"questionId",descending:!0,page:1,rowsPerPage:10,rowsNumber:0}),q=u(!1),J=u(!1),I=u(!1),$=u(null),H=u(null),m=u({}),ae=u([]),de=u([]),be=u(!1),ye=[{name:"questionId",label:"ID",field:"questionId",align:"left",sortable:!0},{name:"questionType",label:"Type",field:"questionType",align:"left"},{name:"questionText",label:"Question",field:"questionText",align:"left",style:"white-space: pre-wrap; min-width: 400px;"},{name:"isActive",label:"Active",field:"isActive",align:"center",sortable:!0},{name:"createdAt",label:"Created",field:"createdAt",align:"center",sortable:!0},{name:"actions",label:"Actions",align:"center"}],U=u([]),V=u(vt),i=u(["Multiple Choice","True/False","Short Answer","Essay","Matching"]),p=u(Ct),d=xe(()=>{const g=m.value.questionType;return["Multiple Choice","True/False"].includes(g)}),oe=async()=>{var g;S.value=!0,b.value=0;try{const c=await L.get("/api/questions/summary/classes",{params:{sc1:j}});O.value=c.data,(g=c.data)!=null&&g.length&&(b.value=c.data.reduce((n,N)=>n+N.totalQuestions,0))}catch(c){console.error("Failed to fetch class summary:",c),v.notify({type:"negative",message:"Failed to load class summary."})}finally{S.value=!1}},ve=async g=>{S.value=!0,R.value=[];try{const c=await L.get(`/api/questions/summary/subjects/${g}`,{params:{sc1:j}});R.value=c.data.map(n=>({SubjectId:n.subjectId,SubjectName:n.subjectName,TotalQuestions:n.totalQuestions}))}catch(c){console.error("Failed to fetch subject summary:",c),v.notify({type:"negative",message:"Failed to load subject summary."})}finally{S.value=!1}},Te=g=>{Q.value={ClassId:g.classId},k.value=null,C.value=[],x.value.rowsNumber=0,A.value="subjects",ve(g.classId)},qe=g=>{k.value={SubjectId:g.SubjectId,SubjectName:g.SubjectName},x.value.page=1,Ce()},ue=()=>{A.value="classes",Q.value=null,k.value=null,C.value=[],x.value.rowsNumber=0},Ce=async()=>{var g,c;if(!k.value||!Q.value){C.value=[],x.value.rowsNumber=0;return}_.value=!0;try{const n={sc1:j,classId:Q.value.ClassId,subjectId:k.value.SubjectId,page:x.value.page,pageSize:x.value.rowsPerPage,...M.value};
1Object.keys(n).forEach(Y=>(n[Y]==null||n[Y]==="")&&delete n[Y]);const N=await L.get("/api/questions",{params:n});C.value=N.data.items||[],x.value.rowsNumber=N.data.totalCount||0}catch(n){console.error("Failed to fetch questions:",n),v.notify({type:"negative",message:"Failed to load questions.",caption:((c=(g=n.response)==null?void 0:g.data)==null?void 0:c.message)||""}),C.value=[],x.value.rowsNumber=0}finally{_.value=!1}},De=g=>{x.value=g.pagination,Ce()},Ie=async()=>{try{const g=await L.get("/api/subject/subjects",{params:{sc1:j}}),c=new Map;g.data.forEach(n=>{c.has(n.subjectName)||c.set(n.subjectName,{label:n.subjectName,value:n.subjectId})}),U.value=Array.from(c.values())}catch(g){console.error("Failed to fetch subjects for dialog:",g)}},y=()=>{s(),Q.value&&(m.value.classId=Q.value.ClassId),k.value&&(m.value.subjectId=k.value.SubjectId),J.value=!0},l=async g=>{try{const c=await L.get(`/api/questions/${g.questionId}`);m.value=c.data,I.value=!0,J.value=!0}catch{v.notify({type:"negative",message:"Failed to load question details."})}},t=async g=>{var c;if(ae.value=[],de.value=[],!!g){be.value=!0;try{const n=await L.get(`/api/subjectTopic/bygrade/${encodeURIComponent(g)}/${j}`);de.value=Array.isArray(n.data)?n.data:[],ae.value=de.value.map(N=>N.topic).filter(Boolean)}catch(n){console.error("Failed to fetch topics by grade:",n),((c=n.response)==null?void 0:c.status)!==404&&v.notify({type:"negative",message:"Failed to load topics for this grade."})}finally{be.value=!1}}},s=()=>{m.value={questionId:null,sc1:j,subjectId:null,examTerm:null,classId:null,topic:null,questionType:null,questionText:"",marks:1,isActive:!0,options:[],shortAnswerText:"",questionImage:null,questionImageExt:null},$.value=null,I.value=!1,ae.value=[],de.value=[]},r=async()=>{var c,n,N,Y;if(await H.value.validate()){q.value=!0;try{await new Promise(_e=>{if(!$.value)return _e();W($.value,(we,ze)=>{m.value.questionImageBase64=we,m.value.questionImageExt=ze,_e()})});let ne=null;if(m.value.topic){const _e=de.value.find(we=>we.topic===m.value.topic);_e&&(ne=_e.tranno)}const ie={SubjectId:Number(m.value.subjectId),ExamTerm:m.value.examTerm,ClassId:m.value.classId,Topic:ne,QuestionType:m.value.questionType,QuestionText:m.value.questionText,Marks:Number(m.value.marks),OptionsJson:(c=m.value.options)!=null&&c.length?JSON.stringify(m.value.options):null,ShortAnswerText:m.value.shortAnswerText||null,QuestionImageBase64:m.value.questionImageBase64||null,QuestionImageExt:m.value.questionImageExt||null};let ke;if(I.value){const _e=Number(ne?String(E.getSchoolCode)+String(ne):E.getSchoolCode),we={...ie,IsActive:!!m.value.isActive,updated_by:_e};ke=await L.put(`/api/questions/${m.value.questionId}`,we)}else{const _e=Number(ne?String(E.getSchoolCode)+String(ne):E.getSchoolCode),we={...ie,Sc1:Number(E.getSchoolCode),created_by:_e};ke=await L.post("/api/questions",we)}if((n=ke.data)!=null&&n.success)v.notify({type:"positive",message:`Question ${I.value?"updated":"created"} successfully!`}),J.value=!1,await Ce(),A.value==="subjects"&&ve(Q.value.ClassId),oe();else throw new Error(((N=ke.data)==null?void 0:N.message)||"An unknown API error occurred.")}catch(ne){console.error("Full save error:",ne);const ie=(Y=ne.response)==null?void 0:Y.data;v.notify({type:"negative",message:`Failed to ${I.value?"update":"create"} question.`,caption:(ie==null?void 0:ie.message)||(ie!=null&&ie.modelState?ie.modelState[Object.keys(ie.modelState)[0]][0]:ne.message),multiLine:!0,timeout:7e3})}finally{q.value=!1,$.value=null,m.value.questionImageBase64=null}}},f=async g=>{try{await L.put(`/api/questions/${g.questionId}/status`,{isActive:g.isActive}),v.notify({type:"positive",message:`Question ${g.isActive?"activated":"deactivated"} successfully.`})}catch{g.isActive=!g.isActive,v.notify({type:"negative",message:"Failed to update question status."})}},h=g=>{v.dialog({title:"Confirm Delete",message:`Are you sure you want to delete Question ID ${g.questionId}?`,cancel:!0,persistent:!0}).onOk(async()=>{try{await L.delete(`/api/questions/${g.questionId}`),v.notify({type:"positive",message:"Question deleted successfully."}),Ce(),A.value==="subjects"&&ve(Q.value.ClassId),oe()}catch{v.notify({type:"negative",message:"Failed to delete question."})}})},z=()=>{m.value.options||(m.value.options=[]),m.value.options.push({optionKey:String.fromCharCode(65+m.value.options.length),optionText:"",displayOrder:m.value.options.length,isCorrect:!1})},K=g=>{m.value.options.splice(g,1)},te=g=>{m.value.options.forEach(c=>c.isCorrect=c===g)},W=(g,c)=>new Promise(n=>{if(!g)return c(null,null),n();const N=new FileReader;N.onload=Y=>{const ne=Y.target.result.split(",")[1],ie=g.name.split(".").pop();c(ne,ie),n()},N.readAsDataURL(g)});return Qe([()=>k.value,()=>M.value],()=>{x.value.page=1,Ce()},{deep:!0}),Qe(()=>m.value.questionType,g=>{g&&!["Multiple Choice","True/False"].includes(g)&&(m.value.options=[]),g!=="Short Answer"&&(m.value.shortAnswerText="")}),Qe(()=>m.value.classId,async(g,c)=>{if(g!==c&&c!==void 0&&(m.value.topic=null),g){if(await t(g),I.value&&m.value.topic){const n=Number(m.value.topic),N=de.value.find(Y=>Number(Y.tranno)===n);N&&(m.value.topic=N.topic,ae.value.includes(N.topic)||ae.value.unshift(N.topic))}}else ae.value=[],de.value=[]}),Ge(()=>{oe(),Ie(),s()}),(g,c)=>(D(),ge(Le,{class:"q-pa-md"},{default:a(()=>[o("div",Ca,[$a,e(Tt,{class:"q-mt-sm"},{default:a(()=>[e(Ee,{label:"Dashboard",icon:"home",to:"/"}),e(Ee,{label:"Exam System"}),e(Ee,{label:"Question Management"})]),_:1})]),o("div",Va,[o("div",qa,[e(Z,{class:"q-pa-md q-mb-md"},{default:a(()=>[o("div",Ia,[e(w,{color:"primary",icon:"add",label:"Add Question",onClick:y}
1),e(Se),k.value?(D(),X("div",ja,[e(se,{modelValue:M.value.examTerm,"onUpdate:modelValue":c[0]||(c[0]=n=>M.value.examTerm=n),options:p.value,label:"Filter by Term",outlined:"",dense:"",clearable:"",style:{width:"200px"}},null,8,["modelValue","options"]),e(se,{modelValue:M.value.questionType,"onUpdate:modelValue":c[1]||(c[1]=n=>M.value.questionType=n),options:i.value,label:"Filter by Type",outlined:"",dense:"",clearable:"",style:{width:"200px"}},null,8,["modelValue","options"])])):me("",!0)])]),_:1}),k.value?(D(),X("div",ka,[e(Re,{rows:C.value,columns:ye,loading:_.value,pagination:x.value,"onUpdate:pagination":c[2]||(c[2]=n=>x.value=n),"rows-per-page-options":[10,20,50,100],"row-key":"questionId",class:"shadow-1",onRequest:De,"binary-state-sort":""},{"body-cell-questionText":a(n=>[e(pe,{props:n},{default:a(()=>[o("div",Na,T(n.row.questionText),1),o("div",Aa," Term: "+T(n.row.examTerm)+" | Marks: "+T(n.row.marks),1)]),_:2},1032,["props"])]),"body-cell-isActive":a(n=>[e(pe,{props:n},{default:a(()=>[e(St,{modelValue:n.row.isActive,"onUpdate:modelValue":[N=>n.row.isActive=N,N=>f(n.row)],color:"primary"},null,8,["modelValue","onUpdate:modelValue"])]),_:2},1032,["props"])]),"body-cell-createdAt":a(n=>[e(pe,{props:n},{default:a(()=>[P(T(new Date(n.row.createdAt).toLocaleDateString()),1)]),_:2},1032,["props"])]),"body-cell-actions":a(n=>[e(pe,{props:n,class:"q-gutter-x-sm"},{default:a(()=>[e(w,{flat:"",dense:"",round:"",icon:"edit",color:"primary",onClick:N=>l(n.row)},null,8,["onClick"]),e(w,{flat:"",dense:"",round:"",icon:"delete",color:"negative",onClick:N=>h(n.row)},null,8,["onClick"])]),_:2},1032,["props"])]),_:1},8,["rows","loading","pagination"])])):(D(),X("div",Pa,[e(Z,{flat:"",bordered:"",class:"text-center q-pa-xl"},{default:a(()=>[e(Fe,{name:"arrow_back",size:"lg",color:"primary"}),Fa,Da]),_:1})]))]),o("div",Qa,[e(Z,null,{default:a(()=>[e(G,{class:"bg-grey-2"},{default:a(()=>{var n;return[o("div",Ea,[o("div",Ra,[o("div",Ma,T(A.value==="classes"?"Classes":`Subjects in ${((n=Q.value)==null?void 0:n.ClassId)||""}`),1)]),A.value==="subjects"?(D(),X("div",Ua,[e(w,{flat:"",round:"",dense:"",icon:"arrow_back",onClick:ue},{default:a(()=>[e(Xe,null,{default:a(()=>[P("Back to Classes")]),_:1})]),_:1})])):me("",!0)])]}),_:1}),e(We),A.value==="classes"&&!S.value&&O.value.length?(D(),ge(G,{key:0,class:"text-center bg-blue-1"},{default:a(()=>[o("div",Oa,T(b.value),1),Ba]),_:1})):me("",!0),A.value==="classes"?(D(),ge(Rt,{key:1,bordered:"",separator:""},{default:a(()=>[(D(!0),X(Je,null,ft(O.value,(n,N)=>re((D(),ge(Oe,{key:N,clickable:"",onClick:Y=>Te(n),active:Q.value&&Q.value.ClassId===n.classId,"active-class":"bg-blue-1 text-primary"},{default:a(()=>[e(Ne,{class:"text-weight-medium"},{default:a(()=>[P(T(n.classId),1)]),_:2},1024),e(Ne,{side:""},{default:a(()=>[e(mt,{label:n.totalQuestions,color:"grey-7"},null,8,["label"])]),_:2},1024)]),_:2},1032,["onClick","active"])),[[Pt]])),128)),!O.value.length&&!S.value?(D(),ge(Oe,{key:0},{default:a(()=>[e(Ne,{class:"text-center text-grey"},{default:a(()=>[P(" No classes with questions found. ")]),_:1})]),_:1})):me("",!0)]),_:1})):me("",!0),A.value==="subjects"?(D(),ge(Rt,{key:2,bordered:"",separator:""},{default:a(()=>[(D(!0),X(Je,null,ft(R.value,(n,N)=>re((D(),ge(Oe,{key:N,clickable:"",onClick:Y=>qe(n),active:k.value&&k.value.SubjectId===n.SubjectId,"active-class":"bg-teal-1 text-teal-8"},{default:a(()=>[e(Ne,null,{default:a(()=>[e(na,null,{default:a(()=>[P(T(n.SubjectName),1)]),_:2},1024)]),_:2},1024),e(Ne,{side:""},{default:a(()=>[e(mt,{label:n.TotalQuestions,color:"grey-7"},null,8,["label"])]),_:2},1024)]),_:2},1032,["onClick","active"])),[[Pt]])),128)),!R.value.length&&!S.value?(D(),ge(Oe,{key:0},{default:a(()=>[e(Ne,{class:"text-center text-grey"},{default:a(()=>[P(" No questions found for this class. ")]),_:1})]),_:1})):me("",!0)]),_:1})):me("",!0),e(ua,{showing:S.value},{default:a(()=>[e(Ut,{size:"40px",color:"primary"})]),_:1},8,["showing"])]),_:1})])]),e(Ve,{modelValue:J.value,"onUpdate:modelValue":c[12]||(c[12]=n=>J.value=n),persistent:"",onHide:s},{default:a(()=>[e(Z,{style:{"min-width":"800px","max-width":"1000px"}},{default:a(()=>[e(G,{class:"bg-primary text-white"},{default:a(()=>[o("div",Ga,T(I.value?"Edit Question":"Add New Question"),1)]),_:1}),e(et,{onSubmit:Ze(r,["prevent"]),ref_key:"questionForm",ref:H},{default:a(()=>[e(G,{class:"q-pt-lg"},{default:a(()=>[o("div",La,[o("div",za,[e(se,{modelValue:m.value.subjectId,"onUpdate:modelValue":c[3]||(c[3]=n=>m.value.subjectId=n),options:U.value,label:"Subject *",outlined:"",dense:"","emit-value":"","map-options":"",rules:[n=>!!n||"Required"]},null,8,["modelValue","options","rules"])]),o("div",Ha,[e(se,{modelValue:m.value.classId,"onUpdate:modelValue":c[4]||(c[4]=n=>m.value.classId=n),options:V.value,label:"Class *",outlined:"",dense:"","emit-value":"","map-options":"",rules:[n=>!!n||"Required"]},null,8,["modelValue","options","rules"])]),o("div",Ya,[e(se,{modelValue:m.value.topic,"onUpdate:modelValue":c[5]||(c[5]=n=>m.value.topic=n),options:ae.value,label:"Topic",outlined:"",dense:"",clearable:"",loading:be.value,disable:!m.value.classId,hint:"Select a class to load topics"},{"no-option":a(()=>[e(Oe,null,{default:a(()=>[e(Ne,{class:"text-grey"},{default:a(()=>[P(" No topics available for this class ")]),_:1})]),_:1})]),_:1},8,["modelValue","options","loading","disable"])]),o("div",Wa,[e(se,{modelValue:m.value.questionType,"onUpdate:modelValue":c[6]||(c[6]=n=>m.value.questionType=n),options:i.value,label:"Question Type *",outlined:"",dense:"",rules:[n=>!!n||"Required"]},null,8,["modelValue","options","rules"])]),o("div",Xa,[e(se,{modelValue:m.value.examTerm,"onUpdate:modelValue":c[7]||(c[7]=n=>m.value.examTerm=n),options:p.value,label:"Exam Term *",outlined:"",dense:"",rules:[n=>!!n||"Required"]},null,8,["modelValue","options","rules"])]),o("div",Ja,[e(ee,{modelValue:m.value.marks,"onUpdate:modelValue":c[8]||(c[8]=n=>m.value.marks=n),modelModifiers:{number:!0},type:"number",label:"Marks *",outlined:"",dense:"",rules:[n=>n>0||"Must be > 0"]},null,8,["modelValue","rules"])]),o("div",Ka,[e(ee,{modelValue:m.value.questionText,"onUpdate:modelValue":c[9]||(c[9]=n=>m.value.questionText=n),label:"Question Text *",outlined:"",dense:"",type:"textarea",rules:[n=>!!n||"Required"]},null,8,["modelValue","rules"])]),o("div",Za,[e(Lt,{modelValue:$.value,"onUpdate:modelValue":c[10]||(c[10]=n=>$.value=n),label:"Upload Question Image",accept:"image/*",outlined:"",dense:"",clearable:""},{prepend:a(()=>[e(Fe,{name:"attach_file"})]),_:1},8,["modelValue"])]),B(d)?(D(),X("div",el,[e(We,{class:"q-my-md"}
1),tl,(D(!0),X(Je,null,ft(m.value.options,(n,N)=>(D(),X("div",{key:N,class:"q-mb-md q-pa-sm bordered"},[o("div",al,[o("div",ll,[e(ee,{modelValue:n.optionKey,"onUpdate:modelValue":Y=>n.optionKey=Y,label:"Key",outlined:"",dense:"",rules:[Y=>!!Y||"Required"]},null,8,["modelValue","onUpdate:modelValue","rules"])]),o("div",sl,[e(ee,{modelValue:n.optionText,"onUpdate:modelValue":Y=>n.optionText=Y,label:"Option Text",outlined:"",dense:"",rules:[Y=>!!Y||"Required"]},null,8,["modelValue","onUpdate:modelValue","rules"])]),o("div",ol,[e(Kt,{modelValue:n.isCorrect,"onUpdate:modelValue":[Y=>n.isCorrect=Y,Y=>te(n)],label:"Is Correct"},null,8,["modelValue","onUpdate:modelValue"])]),o("div",nl,[e(w,{flat:"",round:"",icon:"delete",color:"negative",onClick:Y=>K(N)},null,8,["onClick"])])])]))),128)),e(w,{color:"primary",icon:"add",label:"Add Option",onClick:z,class:"q-mt-sm"})])):me("",!0),m.value.questionType==="Short Answer"?(D(),X("div",ul,[e(We,{class:"q-my-md"}),e(ee,{modelValue:m.value.shortAnswerText,"onUpdate:modelValue":c[11]||(c[11]=n=>m.value.shortAnswerText=n),label:"Correct Answer Text",outlined:"",dense:"",rules:[n=>!!n||"Correct answer is required"]},null,8,["modelValue","rules"])])):me("",!0),m.value.questionType==="Matching"?(D(),X("div",il,[e(We,{class:"q-my-md"}),e(ct,{class:"bg-info text-white"},{default:a(()=>[P("UI for Matching questions is not yet implemented.")]),_:1})])):me("",!0),m.value.questionType==="Essay"?(D(),X("div",rl,[e(We,{class:"q-my-md"}),e(ct,{class:"bg-grey-4"},{default:a(()=>[P("No answer needs to be defined for an Essay question.")]),_:1})])):me("",!0)])]),_:1}),e(je,{align:"right",class:"q-pa-md"},{default:a(()=>[re(e(w,{flat:"",label:"Cancel",color:"negative"},null,512),[[fe]]),e(w,{label:"Save",type:"submit",color:"primary",loading:q.value},null,8,["loading"])]),_:1})]),_:1},8,["onSubmit"])]),_:1})]),_:1},8,["modelValue"])]),_:1}))}},cl=pt(dl,[["__scopeId","data-v-37af87c7"]]),ml={class:"q-pa-md"},pl={class:"text-h6"},vl={class:"row q-col-gutter-md"},fl={class:"col-12 col-sm-6"},gl={class:"col-12 col-sm-6"},bl={class:"q-pa-sm rounded-borders",style:{border:"1px solid #e0e0e0"}},yl=o("div",{class:"text-subtitle2 q-mb-sm"},"Question Generation Rule",-1),hl={class:"row q-col-gutter-md"},_l={class:"col-12 col-sm-4"},wl={class:"col-12 col-sm-4"},xl={class:"col-12 col-sm-4"},Sl={__name:"ExamManagement",setup(F){const v=tt(),j=Ke().getSchoolCode,A=u([]),S=u(!1),O=u(!1),R=u(!1),Q=u(!1),k=u(vt),b=u([]),C=u(!1),_=u({}),M=u(Ct),x=[{label:"Normal",value:"normal"},{label:"Advanced",value:"advance"},{label:"Mixed",value:"mixed"}],q=u({sortBy:"ExamDate",descending:!0,page:1,rowsPerPage:10,rowsNumber:0}),J=[{name:"ExamName",label:"Exam Name",field:"ExamName",align:"left",sortable:!0},{name:"ClassId",label:"Class",field:"ClassId",align:"left",sortable:!0},{name:"TotalQuestions",label:"Questions",field:"TotalQuestions",align:"center"},{name:"DurationMinutes",label:"Duration",field:"DurationMinutes",align:"center"},{name:"QuestionType",label:"Type",field:"QuestionType",align:"left"},{name:"Rules",label:"Question Model",field:"Rules",align:"left"},{name:"status",label:"Status",field:"IsPublished",align:"center"},{name:"actions",label:"Actions",field:"actions",align:"right"}],I=i=>i?i.charAt(0).toUpperCase()+i.slice(1):"",$=i=>({ExamId:i.examId,ExamName:i.examName,ClassId:i.classId,Section:i.section,SubjectId:i.subjectId,ExamDate:i.examDate,StartTime:i.startTime,DurationMinutes:i.durationMinutes,TotalQuestions:i.totalQuestions,QuestionType:i.questionType,IsPublished:i.isPublished,Rules:i.rules,Sc1:i.sc1}),H=async i=>{var Te,qe;const{page:p,rowsPerPage:d,sortBy:oe,descending:ve}=i.pagination;S.value=!0;try{const ue=await L.get("/api/exam-schedules",{params:{sc1:j,page:p,pageSize:d,sortBy:oe,desc:ve}});ue.data&&Array.isArray(ue.data.items)?(A.value=ue.data.items.map($),q.value.rowsNumber=ue.data.totalCount):(A.value=[],q.value.rowsNumber=0)}catch(ue){console.error("Failed to fetch schedules:",ue),v.notify({type:"negative",message:"Could not load schedules.",caption:((qe=(Te=ue.response)==null?void 0:Te.data)==null?void 0:qe.Message)||"A server error occurred."}),A.value=[]}finally{q.value.page=p,q.value.rowsPerPage=d,q.value.sortBy=oe,q.value.descending=ve,S.value=!1}},m=i=>{H(i)};
1Ge(()=>{H({pagination:q.value})}),Qe(()=>_.value.ClassId,i=>{_.value.SubjectId&&(_.value.SubjectId=null),ae(i)});const ae=async i=>{if(!i){b.value=[];return}C.value=!0;try{const p=await L.get(`/api/questions/summary/subjects/${i}`,{params:{sc1:j}});b.value=p.data.map(d=>({SubjectId:d.subjectId,SubjectName:`${d.subjectName} (${d.totalQuestions} Qs)`}))}catch(p){console.error("Failed to fetch subjects:",p)}finally{C.value=!1}},de=()=>({ExamId:null,ExamName:"",ClassId:null,Section:"A",SubjectId:null,ExamDate:new Date().toISOString().split("T")[0],StartTime:"09:00:00",DurationMinutes:30,TotalQuestions:50,QuestionType:"normal",Sc1:j,IsPublished:!1,Rules:null}),be=()=>{Q.value=!1,_.value=de(),b.value=[],R.value=!0},ye=i=>{Q.value=!0,_.value=JSON.parse(JSON.stringify(i)),_.value.ExamDate=new Date(i.ExamDate).toISOString().split("T")[0],R.value=!0},U=async()=>{var p,d,oe;O.value=!0;const i={..._.value};i.Sc1=j,i.Sc1=parseInt(i.Sc1,10),i.SubjectId=parseInt(i.SubjectId,10),i.TotalQuestions=parseInt(i.TotalQuestions,10),i.DurationMinutes=parseInt(i.DurationMinutes,10);try{Q.value?(await L.put(`/api/exam-schedules/${i.ExamId}`,i),v.notify({type:"positive",message:"Schedule updated successfully!"})):(delete i.ExamId,await L.post("/api/exam-schedules",i),v.notify({type:"positive",message:"Schedule created successfully!"})),R.value=!1,H({pagination:q.value})}catch(ve){console.error("Error saving schedule:",((p=ve.response)==null?void 0:p.data)||ve),v.notify({type:"negative",message:"Error Saving Schedule",caption:((oe=(d=ve.response)==null?void 0:d.data)==null?void 0:oe.message)||"An unexpected error occurred."})}finally{O.value=!1}},V=i=>{v.dialog({title:"Confirm Deletion",message:`Are you sure you want to delete the schedule "${i.ExamName}"?`,cancel:!0,persistent:!0}).onOk(async()=>{var p,d;try{await L.delete(`/api/exam-schedules/${i.ExamId}`,{data:{sc1:j}}),v.notify({type:"positive",message:"Schedule deleted successfully."}),H({pagination:q.value})}catch(oe){console.error("Delete error:",oe),v.notify({type:"negative",message:"Failed to delete schedule.",caption:((d=(p=oe.response)==null?void 0:p.data)==null?void 0:d.message)||"An unknown error occurred."})}})};return(i,p)=>(D(),ge(Le,{padding:""},{default:a(()=>[o("div",ml,[e($t,{class:"q-mb-md rounded-borders"},{default:a(()=>[e(Vt,{class:"text-subtitle1"},{default:a(()=>[P(" Exam Schedule Management ")]),_:1}),e(Se),e(w,{color:"primary",icon:"add",label:"New Schedule",onClick:be,"no-caps":""})]),_:1}),e(Re,{title:"Scheduled Exams",rows:A.value,columns:J,"row-key":"ExamId",pagination:q.value,"onUpdate:pagination":p[0]||(p[0]=d=>q.value=d),loading:S.value,onRequest:m,"binary-state-sort":""},{"body-cell-ExamDate":a(d=>[e(pe,{props:d},{default:a(()=>[P(T(new Date(d.row.ExamDate).toLocaleDateString())+" at "+T(d.row.StartTime),1)]),_:2},1032,["props"])]),"body-cell-DurationMinutes":a(d=>[e(pe,{props:d},{default:a(()=>[P(T(d.row.DurationMinutes)+" Mins ",1)]),_:2},1032,["props"])]),"body-cell-QuestionType":a(d=>[e(pe,{props:d},{default:a(()=>[P(T(I(d.row.QuestionType)),1)]),_:2},1032,["props"])]),"body-cell-Rules":a(d=>[e(pe,{props:d},{default:a(()=>[P(T(d.row.Rules||"N/A"),1)]),_:2},1032,["props"])]),"body-cell-status":a(d=>[e(pe,{props:d},{default:a(()=>[e(mt,{color:d.row.IsPublished?"positive":"warning",label:d.row.IsPublished?"Published":"Draft"},null,8,["color","label"])]),_:2},1032,["props"])]),"body-cell-actions":a(d=>[e(pe,{props:d},{default:a(()=>[e(w,{flat:"",round:"",dense:"",icon:"edit",onClick:oe=>ye(d.row),color:"info","aria-label":"Edit Schedule"},null,8,["onClick"]),e(w,{flat:"",round:"",dense:"",icon:"delete",onClick:oe=>V(d.row),color:"negative","aria-label":"Delete Schedule"},null,8,["onClick"])]),_:2},1032,["props"])]),_:1},8,["rows","pagination","loading"])]),e(Ve,{modelValue:R.value,"onUpdate:modelValue":p[11]||(p[11]=d=>R.value=d),persistent:""},{default:a(()=>[e(Z,{style:{width:"700px","max-width":"80vw"}},{default:a(()=>[e(G,{class:"row items-center q-pb-none"},{default:a(()=>[o("div",pl,T(Q.value?"Edit":"Create")+" Exam Schedule ",1),e(Se),re(e(w,{icon:"close",flat:"",round:"",dense:""},null,512),[[fe]])]),_:1}),e(G,null,{default:a(()=>[e(et,{onSubmit:Ze(U,["prevent"]),class:"q-gutter-y-md"},{default:a(()=>[e(ee,{filled:"",modelValue:_.value.ExamName,"onUpdate:modelValue":p[1]||(p[1]=d=>_.value.ExamName=d),label:"Exam Name *","lazy-rules":"",rules:[d=>!!d||"Exam name is required"]},null,8,["modelValue","rules"]),o("div",vl,[o("div",fl,[e(se,{filled:"",modelValue:_.value.ClassId,"onUpdate:modelValue":p[2]||(p[2]=d=>_.value.ClassId=d),options:k.value,label:"Select Class *","lazy-rules":"",rules:[d=>d!==null||"Class is required"],"emit-value":"","map-options":"",clearable:""},null,8,["modelValue","options","rules"])]),o("div",gl,[e(se,{filled:"",modelValue:_.value.SubjectId,"onUpdate:modelValue":p[3]||(p[3]=d=>_.value.SubjectId=d),options:b.value,label:"Select Subject *",loading:C.value,disable:!_.value.ClassId,"option-value":"SubjectId","option-label":"SubjectName","emit-value":"","map-options":"","lazy-rules":"",rules:[d=>d!==null||"Subject is required"]},null,8,["modelValue","options","loading","disable","rules"])])]),e(se,{filled:"",modelValue:_.value.Rules,"onUpdate:modelValue":p[4]||(p[4]=d=>_.value.Rules=d),options:M.value,label:"Question Model","emit-value":"","map-options":"",clearable:""},null,8,["modelValue","options"]),o("div",bl,[yl,e(Ot,{modelValue:_.value.QuestionType,"onUpdate:modelValue":p[5]||(p[5]=d=>_.value.QuestionType=d),options:x,color:"primary",inline:""},null,8,["modelValue"])]),o("div",hl,[o("div",_l,[e(ee,{filled:"",modelValue:_.value.TotalQuestions,"onUpdate:modelValue":p[6]||(p[6]=d=>_.value.TotalQuestions=d),modelModifiers:{number:!0},type:"number",label:"Total Questions"},null,8,["modelValue"])]),o("div",wl,[e(ee,{filled:"",modelValue:_.value.DurationMinutes,"onUpdate:modelValue":p[7]||(p[7]=d=>_.value.DurationMinutes=d),modelModifiers:{number:!0},type:"number",label:"Duration (Mins)"}
1,null,8,["modelValue"])]),o("div",xl,[e(ee,{filled:"",modelValue:_.value.StartTime,"onUpdate:modelValue":p[8]||(p[8]=d=>_.value.StartTime=d),type:"time",label:"Start Time","stack-label":""},null,8,["modelValue"])])]),o("div",null,[e(ee,{filled:"",modelValue:_.value.ExamDate,"onUpdate:modelValue":p[9]||(p[9]=d=>_.value.ExamDate=d),type:"date",label:"Exam Date","stack-label":""},null,8,["modelValue"])]),e(St,{modelValue:_.value.IsPublished,"onUpdate:modelValue":p[10]||(p[10]=d=>_.value.IsPublished=d),label:"Publish this Exam immediately",color:"positive"},null,8,["modelValue"]),e(je,{align:"right",class:"q-mt-md"},{default:a(()=>[re(e(w,{label:"Cancel",color:"grey",flat:""},null,512),[[fe]]),e(w,{label:Q.value?"Update Schedule":"Create Schedule",type:"submit",color:"primary",loading:O.value},null,8,["label","loading"])]),_:1})]),_:1},8,["onSubmit"])]),_:1})]),_:1})]),_:1},8,["modelValue"])]),_:1}))}};let Ye,ht,Mt=0,Ue=null,ce={},Be={};const Yt={group:"__default_quasar_group__",delay:0,message:!1,html:!1,spinnerSize:80,spinnerColor:"",messageColor:"",backgroundColor:"",boxClass:"",spinner:Gt,customClass:""},Wt={...Yt};function Tl(F){if((F==null?void 0:F.group)!==void 0&&Be[F.group]!==void 0)return Object.assign(Be[F.group],F);const v=Bt(F)===!0&&F.ignoreDefaults===!0?{...Yt,...F}:{...Wt,...F};return Be[v.group]=v,v}const le=Zt({isActive:!1},{show(F){ce=Tl(F);const{group:v}=ce;return le.isActive=!0,Ye!==void 0?(ce.uid=Mt,ht.$forceUpdate()):(ce.uid=++Mt,Ue!==null&&clearTimeout(Ue),Ue=setTimeout(()=>{Ue=null;const E=ea("q-loading");Ye=ta({name:"QLoading",setup(){Ge(()=>{Ft(!0)});function j(){le.isActive!==!0&&Ye!==void 0&&(Ft(!1),Ye.unmount(E),la(E),Ye=void 0,ht=void 0)}function A(){if(le.isActive!==!0)return null;const S=[He(ce.spinner,{class:"q-loading__spinner",color:ce.spinnerColor,size:ce.spinnerSize})];return ce.message&&S.push(He("div",{class:"q-loading__message"+(ce.messageColor?` text-${ce.messageColor}`:""),[ce.html===!0?"innerHTML":"textContent"]:ce.message})),He("div",{class:"q-loading fullscreen flex flex-center z-max "+ce.customClass.trim(),key:ce.uid},[He("div",{class:"q-loading__backdrop"+(ce.backgroundColor?` bg-${ce.backgroundColor}`:"")}),He("div",{class:"q-loading__box column items-center "+ce.boxClass},S)])}return()=>He(aa,{name:"q-transition--fade",appear:!0,onAfterLeave:j},A)}},le.__parentApp),ht=Ye.mount(E)},ce.delay)),E=>{if(E===void 0||Object(E)!==E){le.hide(v);return}le.show({...E,group:v})}},hide(F){if(le.isActive===!0){if(F===void 0)Be={};else{if(Be[F]===void 0)return;{delete Be[F];const v=Object.keys(Be);if(v.length!==0){const E=v[v.length-1];le.show({group:E});return}}}Ue!==null&&(clearTimeout(Ue),Ue=null),le.isActive=!1}},setDefaults(F){Bt(F)===!0&&Object.assign(Wt,F)},install({$q:F,parentApp:v}){F.loading=this,le.__parentApp=v,F.config.loading!==void 0&&this.setDefaults(F.config.loading)}}),Cl={class:"q-pa-md"},$l=o("span",{class:"q-ml-sm text-h6"},"Confirm Password Reset",-1),Vl={key:0},ql=o("span",{class:"q-ml-sm text-h6"},"Password Reset Successful",-1),Il=o("p",null,"Please copy it and provide it to the user.",-1),jl=o("div",{class:"text-h6"},"Password Reset Successful",-1),kl=o("p",null,"Please copy it and provide it to the user.",-1),Nl={class:"row items-center q-col-gutter-md"},Al={class:"col-12 col-md-3"},Pl={class:"col-12 col-md-2"},Fl={class:"col-12 col-md-2"},Dl={class:"col-auto"},Ql={class:"col-auto text-right"},El={class:"text-h6"},Rl={key:1,class:"q-mb-md"},Ml={class:"row q-col-gutter-md"},Ul={class:"col-12 col-sm-6"},Ol={class:"col-12 col-sm-6"},Bl={class:"row q-col-gutter-md"},Gl={class:"col-12 col-sm-6"},Ll={class:"col-12 col-sm-6"},zl={class:"row q-col-gutter-md"},Hl={class:"col-12 col-sm-6"},Yl={class:"col-12 col-sm-6 self-center"},Wl={key:0,class:"text-center q-mt-md"},Xl=o("div",{class:"text-subtitle2"},"Student QR Code",-1),Jl=o("canvas",{id:"qr-code-canvas"},null,-1),Kl=[Xl,Jl],Zl=o("span",{class:"q-ml-sm text-h6"},"Confirm Sync",-1),es=o("p",null,[P(" You are about to "),o("strong",null,"replace ALL existing internal students"),P(" with a new list from the source system. ")],-1),ts=o("p",{class:"text-weight-bold text-negative"}," This will generate new Barcodes and Student IDs for them. This action cannot be undone. Are you ready? ",-1),as={__name:"ExamCandidateManagement",setup(F){const v=tt(),j=Ke().getSchoolCode,A=u([]),S=u({fullName:"",classStu:null,studentType:null}),O=u(!1),R=u(!1),Q=u(!1),k=u(!1),b=u({}),C=u({sortBy:"Id",descending:!0,page:1,rowsPerPage:10}),_=u(null),M=u(!1),x=u(!1),q=u(null),J=u(!1),I=u(null),$=u({isOpen:!1,studentName:"",newPassword:""}),H=[{label:"Entrance Student",value:"Entrance"},{label:"Internal Student",value:"Internal"}],m=["One","Two","Three","Four","Five","Six","Seven","Eight","Nine","Ten","Eleven","Twelve"],ae=["A","B","C","D"],de=[{name:"StudentId",label:"Student ID",field:"StudentId",align:"left",sortable:!0},{name:"FullName",label:"Full Name",field:"FullName",align:"left",sortable:!0},{name:"StudentType",label:"Type",field:"StudentType",align:"left",sortable:!0},{name:"ClassStu",label:"Class",field:"ClassStu",align:"left",sortable:!0},{name:"IsActive",label:"Status",field:"IsActive",align:"center"},{name:"actions",label:"Actions",field:"actions",align:"right"}],be=xe(()=>A.value.filter(y=>{const l=!S.value.fullName||y.FullName.toLowerCase().includes(S.value.fullName.toLowerCase()),t=!S.value.classStu||y.ClassStu===S.value.classStu,s=!S.value.studentType||y.StudentType===S.value.studentType;return l&&t&&s})),ye=xe(()=>({internal:A.value.filter(y=>y.StudentType==="Internal").length,entrance:A.value.filter(y=>y.StudentType==="Entrance").length})),U=y=>({Id:y.id,StudentId:y.studentId,FullName:y.fullName,Email:y.email,PhoneNumber:y.phoneNumber,IsActive:y.isActive,DateCreated:y.dateCreated,StudentType:y.studentType,ClassStu:y.classStu,Sec:y.sec,RealStudentId:y.realStudentId||y.RealStudentId}),V=async()=>{O.value=!0;try{const y=await L.get("/api/entrancestudents",{params:{sc1:j,page:1,pageSize:99999}});A.value=y.data.items.map(U)}catch{v.notify({type:"negative",message:"Failed to fetch student list."})}finally{O.value=!1}};Qe(()=>b.value.StudentId,y=>{y&&k.value&&setTimeout(()=>{const l=document.getElementById("qr-code-canvas");if(l){const t=A.value.find(r=>r.StudentId===y),s=`${y}|${j}|${(t==null?void 0:t.RealStudentId)||"0"}`;Qt.toCanvas(l,s,{width:150,margin:1,errorCorrectionLevel:"H"})}},100)});const i=()=>({Id:null,StudentId:null,FullName:"",Email:"",PhoneNumber:"",IsActive:!0,StudentType:"Entrance",ClassStu:null,Sec:null,Sc1:j}),p=()=>{k.value=!1,b.value=i(),_.value=null,q.value=null,Q.value=!0},d=y=>{k.value=!0,b.value={...y,Sc1:j,RealStudentId:y.RealStudentId||""},_.value=null,Q.value=!0},oe=async()=>{var l,t;R.value=!0;const y={...b.value,Sc1:parseInt(j,10)};try{if(k.value)await L.put(`/api/entrancestudents/${y.Id}`,y),v.notify({type:"positive",message:"Student updated successfully."});else{const s=await L.post("/api/entrancestudents",y);v.notify({type:"positive",message:"Student created successfully."}),_.value=s.data.NewPassword,b.value=i()}await V(),k.value&&(Q.value=!1),q.value=null}catch(s){v.notify({type:"negative",message:"An error occurred.",caption:((t=(l=s.response)==null?void 0:l.data)==null?void 0:t.Message)||""})}finally{R.value=!1}},ve=y=>{I.value=y,J.value=!0},Te=async()=>
1{if(J.value=!1,!!I.value){le.show({message:"Resetting password..."});try{const y=I.value,l=await L.post(`/api/entrancestudents/${y.Id}/reset-password`,{sc1:j});$.value={isOpen:!0,studentName:y.FullName,newPassword:l.data.newPassword}}catch(y){console.error("API Error:",y.response||y),he.create({type:"negative",message:"Failed to reset password."})}finally{le.hide(),I.value=null}}},qe=y=>{v.dialog({title:"Confirm Deletion",message:`Delete ${y.FullName}? This cannot be undone.`,cancel:!0}).onOk(async()=>{try{await L.delete(`/api/entrancestudents/${y.Id}`,{data:{sc1:j}}),v.notify({type:"positive",message:"Student deleted successfully."}),await V()}catch{v.notify({type:"negative",message:"Failed to delete student."})}})},ue=async y=>{y&&(await navigator.clipboard.writeText(y),v.notify({type:"positive",message:"Password copied!",position:"top"}))},Ce=async()=>{var y,l;le.show({message:"Syncing internal students...",boxClass:"bg-grey-2 text-grey-9",spinnerColor:"primary"});try{const t=await L.post(`/api/entrancestudents/sync/internal/${j}`,{});he.create({type:"positive",message:t.data.message||"Sync successful.",caption:`${t.data.recordsSynced} records synced.`,timeout:5e3}),await V()}catch(t){const s=((l=(y=t.response)==null?void 0:y.data)==null?void 0:l.Message)||"An error occurred during the sync process.";he.create({type:"negative",message:"Sync Failed",caption:s})}finally{le.hide()}},De=()=>{S.value={fullName:"",classStu:null,studentType:null}},Ie=async()=>{x.value=!0;const y=be.value;if(y.length===0){he.create({type:"warning",message:"No students to export with current filters."}),x.value=!1;return}le.show({message:`Generating PDF for ${y.length} students...`});try{const l=new qt({orientation:"p",unit:"mm",format:"a4"}),t=210,s=297,r=10,f=4,h=7,z=(t-2*r)/f,K=(s-2*r)/h,te=3;for(let W=0;W<y.length;W++){const g=y[W];W>0&&W%(f*h)===0&&l.addPage();const c=W%(f*h),n=c%f,N=Math.floor(c/f),Y=r+n*z,ne=r+N*K;l.setDrawColor(200,200,200),l.rect(Y,ne,z,K);const ie=Y+z/2,ke=ne+K/2;l.setFontSize(9),l.setTextColor(0,0,0);const _e=l.splitTextToSize(g.FullName,z-te*2),we=ne+6;l.text(_e,ie,we,{align:"center"});const ze=`${g.StudentId}|${j}|${g.RealStudentId||"0"}`,ot=await Qt.toDataURL(ze,{errorCorrectionLevel:"H",margin:1,width:256}),Me=26,nt=ie-Me/2,ut=ke-Me/2;l.addImage(ot,"PNG",nt,ut,Me,Me),l.setFontSize(8),l.setTextColor(100,100,100);const it=`Class: ${g.ClassStu||"N/A"}`,rt=Y+z-te,dt=ne+K-te;l.text(it,rt,dt,{align:"right"})}l.save(`students-cards-${new Date().toISOString().slice(0,10)}.pdf`)}catch(l){console.error("PDF generation failed:",l),he.create({type:"negative",message:"Failed to generate PDF."})}finally{x.value=!1,le.hide()}};return Ge(V),(y,l)=>(D(),ge(Le,{padding:""},{default:a(()=>[o("div",Cl,[e($t,{class:"q-mb-md rounded-borders"},{default:a(()=>[e(Vt,{class:"text-subtitle1"},{default:a(()=>[P("Student Management")]),_:1}),e(Se),e(w,{color:"deep-orange",icon:"sync",label:"Sync Internal",onClick:l[0]||(l[0]=t=>M.value=!0),"no-caps":"",class:"q-mr-sm"}),e(w,{color:"secondary",icon:"picture_as_pdf",label:"Export PDF",onClick:Ie,loading:x.value,"no-caps":"",class:"q-mr-sm"},null,8,["loading"]),e(w,{color:"primary",icon:"add",label:"New Student",onClick:p,"no-caps":""})]),_:1}),e(Ve,{modelValue:J.value,"onUpdate:modelValue":l[1]||(l[1]=t=>J.value=t)},{default:a(()=>[e(Z,null,{default:a(()=>[e(G,{class:"row items-center"},{default:a(()=>[e(gt,{icon:"help",color:"primary","text-color":"white"}),$l]),_:1}),e(G,{class:"q-pt-none"},{default:a(()=>[I.value?(D(),X("p",Vl,[P(" Are you sure you want to reset the password for "),o("strong",null,T(I.value.FullName),1),P("? ")])):me("",!0)]),_:1}),e(je,{align:"right"},{default:a(()=>[re(e(w,{flat:"",label:"Cancel",color:"primary"},null,512),[[fe]]),e(w,{label:"Yes, Reset",color:"primary",onClick:Te})]),_:1})]),_:1})]),_:1},8,["modelValue"]),e(Ve,{modelValue:$.value.isOpen,"onUpdate:modelValue":l[3]||(l[3]=t=>$.value.isOpen=t),persistent:""},{default:a(()=>[e(Z,{style:{width:"400px"}},{default:a(()=>[e(G,{class:"row items-center q-pb-none"},{default:a(()=>[e(gt,{icon:"vpn_key",color:"primary","text-color":"white"}
1),ql,e(Se),re(e(w,{icon:"close",flat:"",round:"",dense:""},null,512),[[fe]])]),_:1}),e(G,null,{default:a(()=>[o("p",null,[P(" A new password has been generated for "),o("strong",null,T($.value.studentName),1),P(". ")]),Il,e(ee,{outlined:"",readonly:"","model-value":$.value.newPassword,label:"New Password",class:"q-mt-md"},{append:a(()=>[e(w,{round:"",dense:"",flat:"",icon:"content_copy",onClick:l[2]||(l[2]=t=>ue($.value.newPassword))},{default:a(()=>[e(Xe,null,{default:a(()=>[P("Copy to Clipboard")]),_:1})]),_:1})]),_:1},8,["model-value"])]),_:1}),e(je,{align:"right"},{default:a(()=>[re(e(w,{label:"Close",color:"primary"},null,512),[[fe]])]),_:1})]),_:1})]),_:1},8,["modelValue"]),e(Ve,{modelValue:$.value.isOpen,"onUpdate:modelValue":l[5]||(l[5]=t=>$.value.isOpen=t),persistent:""},{default:a(()=>[e(Z,{style:{width:"400px"}},{default:a(()=>[e(G,{class:"row items-center q-pb-none"},{default:a(()=>[jl,e(Se),re(e(w,{icon:"close",flat:"",round:"",dense:""},null,512),[[fe]])]),_:1}),e(G,null,{default:a(()=>[o("p",null,[P(" A new password has been generated for "),o("strong",null,T($.value.studentName),1),P(". ")]),kl,e(ee,{"model-value":$.value.newPassword,label:"New Password",readonly:"",outlined:"",color:"primary",class:"q-mt-md"},{append:a(()=>[e(w,{round:"",dense:"",flat:"",icon:"content_copy",onClick:l[4]||(l[4]=t=>ue($.value.newPassword))},{default:a(()=>[e(Xe,null,{default:a(()=>[P("Copy Password")]),_:1})]),_:1})]),_:1},8,["model-value"])]),_:1}),e(je,{align:"right"},{default:a(()=>[re(e(w,{label:"Close",color:"primary"},null,512),[[fe]])]),_:1})]),_:1})]),_:1},8,["modelValue"]),e(Z,{class:"q-mb-md",flat:"",bordered:""},{default:a(()=>[e(G,{class:"q-pa-sm"},{default:a(()=>[o("div",Nl,[o("div",Al,[e(ee,{dense:"",outlined:"",modelValue:S.value.fullName,"onUpdate:modelValue":l[6]||(l[6]=t=>S.value.fullName=t),label:"Search by Name",clearable:""},null,8,["modelValue"])]),o("div",Pl,[e(se,{dense:"",outlined:"",modelValue:S.value.classStu,"onUpdate:modelValue":l[7]||(l[7]=t=>S.value.classStu=t),options:m,label:"Filter by Class",clearable:""},null,8,["modelValue"])]),o("div",Fl,[e(se,{dense:"",outlined:"",modelValue:S.value.studentType,"onUpdate:modelValue":l[8]||(l[8]=t=>S.value.studentType=t),options:["Entrance","Internal"],label:"Filter by Type",clearable:""},null,8,["modelValue"])]),o("div",Dl,[e(w,{label:"Reset Filters",onClick:De,color:"grey",flat:"","no-caps":""})]),e(Se),o("div",Ql,[e(lt,{icon:"group",color:"blue-1","text-color":"primary",class:"text-weight-medium"},{default:a(()=>[P(" Total Internal: "+T(B(ye).internal),1)]),_:1}),e(lt,{icon:"person_add",color:"green-1","text-color":"positive",class:"text-weight-medium"},{default:a(()=>[P(" Total Entrance: "+T(B(ye).entrance),1)]),_:1})])])]),_:1})]),_:1}),e(Re,{rows:B(be),columns:de,"row-key":"Id",pagination:C.value,"onUpdate:pagination":l[9]||(l[9]=t=>C.value=t),loading:O.value},{"body-cell-actions":a(t=>[e(pe,{props:t},{default:a(()=>[e(w,{flat:"",round:"",dense:"",icon:"edit",onClick:s=>d(t.row),color:"info","aria-label":"Edit"},null,8,["onClick"]),e(w,{flat:"",round:"",dense:"",icon:"vpn_key",onClick:s=>ve(t.row),color:"warning","aria-label":"Reset Password"},{default:a(()=>[e(Xe,null,{default:a(()=>[P("Reset Password")]),_:1})]),_:2},1032,["onClick"]),e(w,{flat:"",round:"",dense:"",icon:"delete",onClick:s=>qe(t.row),color:"negative","aria-label":"Delete"},null,8,["onClick"])]),_:2},1032,["props"])]),"body-cell-IsActive":a(t=>[e(pe,{props:t},{default:a(()=>[e(mt,{color:t.row.IsActive?"positive":"grey",label:t.row.IsActive?"Active":"Inactive"},null,8,["color","label"])]),_:2},1032,["props"])]),_:1},8,["rows","pagination","loading"])]),e(Ve,{modelValue:Q.value,"onUpdate:modelValue":l[19]||(l[19]=t=>Q.value=t),persistent:""},{default:a(()=>[e(Z,{style:{width:"700px","max-width":"80vw"}},{default:a(()=>[e(G,{class:"row items-center q-pb-none"},{default:a(()=>[o("div",El,T(k.value?"Edit":"Create")+" Student",1),e(Se),re(e(w,{icon:"close",flat:"",round:"",dense:""},null,512),[[fe]])]),_:1}),e(G,null,{default:a(()=>[_.value?(D(),ge(ct,{key:0,dense:"",class:"bg-green-2 text-dark q-mb-md rounded-borders"},{avatar:a(()=>[e(Fe,{name:"check_circle",color:"positive"})]),default:a(()=>[P(" New Password: "),o("strong",{class:"cursor-pointer",onClick:l[10]||(l[10]=t=>ue(_.value))},[P(T(_.value),1),e(Xe,null,{default:a(()=>[P("Click to Copy")]),_:1})])]),_:1})):me("",!0),q.value?(D(),X("div",Rl,[e(ee,{"model-value":q.value,label:"Newly Reset Password (Copy this)",readonly:"",outlined:"",color:"warning"},{prepend:a(()=>[e(Fe,{name:"vpn_key"})]),append:a(()=>[e(w,{round:"",dense:"",flat:"",icon:"content_copy",onClick:l[11]||(l[11]=t=>ue(q.value))},{default:a(()=>[e(Xe,null,{default:a(()=>[P("Copy Password")]),_:1})]),_:1})]),_:1}
1,8,["model-value"])])):me("",!0),e(et,{onSubmit:Ze(oe,["prevent"]),class:"q-gutter-y-md"},{default:a(()=>[e(Ot,{modelValue:b.value.StudentType,"onUpdate:modelValue":l[12]||(l[12]=t=>b.value.StudentType=t),options:H,color:"primary",inline:"",dense:""},null,8,["modelValue"]),o("div",Ml,[o("div",Ul,[e(ee,{filled:"",modelValue:b.value.FullName,"onUpdate:modelValue":l[13]||(l[13]=t=>b.value.FullName=t),label:"Full Name *","lazy-rules":"",rules:[t=>!!t||"Name is required"]},null,8,["modelValue","rules"])]),o("div",Ol,[e(ee,{filled:"",modelValue:b.value.Email,"onUpdate:modelValue":l[14]||(l[14]=t=>b.value.Email=t),label:"Email Address",type:"email"},null,8,["modelValue"])])]),o("div",Bl,[o("div",Gl,[e(se,{filled:"",modelValue:b.value.ClassStu,"onUpdate:modelValue":l[15]||(l[15]=t=>b.value.ClassStu=t),options:m,label:"Class *","lazy-rules":"",rules:[t=>!!t||"Class is required"]},null,8,["modelValue","rules"])]),o("div",Ll,[e(se,{filled:"",modelValue:b.value.Sec,"onUpdate:modelValue":l[16]||(l[16]=t=>b.value.Sec=t),options:ae,label:"Section *","lazy-rules":"",rules:[t=>!!t||"Section is required"]},null,8,["modelValue","rules"])])]),o("div",zl,[o("div",Hl,[e(ee,{filled:"",modelValue:b.value.PhoneNumber,"onUpdate:modelValue":l[17]||(l[17]=t=>b.value.PhoneNumber=t),label:"Phone Number"},null,8,["modelValue"])]),o("div",Yl,[k.value?(D(),ge(St,{key:0,modelValue:b.value.IsActive,"onUpdate:modelValue":l[18]||(l[18]=t=>b.value.IsActive=t),label:"Student is Active"},null,8,["modelValue"])):me("",!0)])]),k.value&&b.value.StudentId?(D(),X("div",Wl,Kl)):me("",!0),e(je,{align:"right"},{default:a(()=>[re(e(w,{label:"Cancel",color:"grey",flat:""},null,512),[[fe]]),e(w,{label:k.value?"Update":"Create",type:"submit",color:"primary",loading:R.value},null,8,["label","loading"])]),_:1})]),_:1},8,["onSubmit"])]),_:1})]),_:1})]),_:1},8,["modelValue"]),e(Ve,{modelValue:M.value,"onUpdate:modelValue":l[21]||(l[21]=t=>M.value=t),persistent:""},{default:a(()=>[e(Z,null,{default:a(()=>[e(G,{class:"row items-center"},{default:a(()=>[e(gt,{icon:"sync_problem",color:"warning","text-color":"white"}),Zl]),_:1}),e(G,{class:"q-pt-none"},{default:a(()=>[es,ts]),_:1}),e(je,{align:"right"},{default:a(()=>[re(e(w,{flat:"",label:"Cancel",color:"primary"},null,512),[[fe]]),re(e(w,{label:"Yes, I am Ready",color:"warning",onClick:l[20]||(l[20]=t=>Ce(B(v)))},null,512),[[fe]])]),_:1})]),_:1})]),_:1},8,["modelValue"])]),_:1}))}};_t.register(...da);const ls={class:"row items-center q-mb-md"},ss={class:"col"},os=o("h2",{class:"text-h4 text-weight-bold text-primary"}," Exam Results Dashboard ",-1),ns={class:"col-auto"},us=o("div",{class:"text-h6"},"Filter Options",-1),is={class:"row q-col-gutter-md items-center"},rs={class:"col-12 col-md-3 col-lg-2"},ds={class:"col-12 col-md-3 col-lg-2"},cs={class:"col-12 col-md-2 col-lg-2"},ms={class:"col-12 col-md-2 col-lg-2"},ps={class:"col-12 col-md-2 col-lg-2"},vs={key:0,class:"col-12 col-md-3 col-lg-2"},fs={class:"col-12 col-md-3 col-lg-2"},gs={key:0},bs={class:"row q-col-gutter-md q-mb-md"},ys={class:"col-12 col-md-4"},hs=o("div",{class:"text-h6"},"Average Score",-1),_s={class:"text-h3 text-primary"},ws={class:"col-12 col-md-4"},xs=o("div",{class:"text-h6"},"Top Performer",-1),Ss={class:"text-h5"},Ts={class:"text-subtitle1"},Cs={class:"col-12 col-md-4"},$s=o("div",{class:"text-h6"},"Students Passed",-1),Vs={class:"text-h3 text-primary"},qs={class:"text-subtitle1"},Is={class:"chart-container q-mt-md"},js={key:1,class:"text-center q-pa-lg"},ks=o("div",{class:"text-h6"},"No data available",-1),Ns=o("p",null,'Please select filters and click "View Report"',-1),As={class:"absolute-full flex flex-center"},Ps={class:"text-white text-caption",style:{"font-weight":"600","text-shadow":"1px 1px 2px rgba(0, 0, 0, 0.7)"}},Fs={style:{height:"60px",width:"100%"}},Ds=o("div",{class:"text-h6"},"Detailed Student Results",-1),Qs={class:"q-gutter-sm q-mb-md"},Es={key:0,class:"text-center q-pa-lg"},Rs={key:1},Ms={class:"row q-col-gutter-md q-mb-md"},Us={class:"col-12 col-md-4"},Os=o("div",{class:"text-subtitle2"},"Overall Percentage",-1),Bs={class:"text-h4 text-primary"},Gs={class:"text-subtitle1"},Ls={class:"col-12 col-md-4"},zs=o("div",{class:"text-subtitle2"},"Obtained Marks",-1),Hs={class:"text-h4 text-primary"},Ys={class:"text-subtitle1"},Ws={class:"col-12 col-md-4"},Xs=o("div",{class:"text-subtitle2"},"Performance",-1),Js={class:"absolute-full flex flex-center"},Ks={class:"text-white text-caption"},Zs={__name:"ExamResults",setup(F){const v=tt(),E=u(null),j=u(null),A=u(null),S=u(null),O=u(""),R=u("getsimplifiedledger"),Q=[{label:"Simplified Ledger",value:"getsimplifiedledger"},{label:"Class Ledger (Dynamic)",value:"getclassledger"},{label:"Generate Results (Simple)",value:"generategesults"},{label:"Individual Student",value:"getStudentresult"}],k=u("summary"),b=u(!1),C=u([]),_=u([]),M=u(null),x=u(null),q=u({}),J=u({}),I=u(!1),$=u({}),H=u([]),m=u([]),ae=u(!1),de=u(""),be=xe(()=>C.value.map((l,t)=>({...l,uniqueRowId:`row-${l.studentId||t}`}))),ye=xe(()=>H.value.map((l,t)=>({...l,uniqueRowId:`insight-${l.subjectName||t}`}))),U=xe(()=>{if(!C.value.length)return{avgPercentage:0,topPerformer:{name:"N/A",percentage:0},passedCount:0,passPercentage:0};const l=C.value.filter(z=>typeof z.percentage=="number");if(!l.length)return{avgPercentage:0,topPerformer:{name:"N/A",percentage:0},passedCount:0,passPercentage:0};const t=l.map(z=>z.percentage),s=t.reduce((z,K)=>z+K,0)/t.length,r=l.reduce((z,K)=>K.percentage>z.percentage?K:z,{percentage:-1,name:"N/A"}),f=l.filter(z=>z.percentage>=40).length,h=f/l.length*100;return{avgPercentage:s,topPerformer:r,passedCount:f,passPercentage:h}}),V=xe(()=>{if(!C.value.length)return[];const l={};return C.value.forEach(t=>
1{t.subjectResults&&t.subjectResults.forEach(s=>{l[s.subjectName]||(l[s.subjectName]={name:s.subjectName,scores:[]}),l[s.subjectName].scores.push(s.percentage||0)})}),Object.values(l).map(t=>{if(!t.scores.length)return null;const s=t.scores.reduce((f,h)=>f+h,0)/t.scores.length,r=t.scores.filter(f=>f>=40).length;return{subject:t.name,avgPercentage:s,passRate:r/t.scores.length*100,distributionData:{pass:r,fail:t.scores.length-r}}}).filter(Boolean)}),i=u([{name:"subject",label:"Subject",field:"subject",align:"left"},{name:"avgPercentage",label:"Average %",field:"avgPercentage",format:l=>`${l.toFixed(1)}%`},{name:"passRate",label:"Pass Rate",field:"passRate",format:l=>`${l.toFixed(1)}%`},{name:"distribution",label:"Pass/Fail Distribution",align:"center",style:"width: 200px"}]),p=xe(()=>!$.value||Object.keys($.value).length===0?{percentage:0,grade:"N/A",correct:0,total:0,gradePoint:"0.0"}:{percentage:$.value.percentage||0,grade:$.value.grade||"N/A",correct:$.value.correctAnswers||0,total:$.value.totalQuestions||0,gradePoint:$.value.gradePoint||"0.0"}),d=(l,t)=>l?(Array.isArray(l)?l:[l]).map(r=>{var f,h,z,K,te,W,g,c,n,N,Y,ne,ie,ke,_e,we,ze,ot,Me,nt,ut,it,rt,dt,jt,kt,Nt,At;switch(t){case"getsimplifiedledger":return{studentId:(f=r.studentInfo)==null?void 0:f.studentId,studentName:(h=r.studentInfo)==null?void 0:h.studentName,class:(z=r.studentInfo)==null?void 0:z.class,section:(K=r.studentInfo)==null?void 0:K.section,percentage:(W=(te=r.overallResult)==null?void 0:te.percentage)!=null?W:0,grade:(g=r.overallResult)==null?void 0:g.grade,gradePoint:(c=r.overallResult)==null?void 0:c.gradePoint,correctAnswers:(n=r.overallResult)==null?void 0:n.correctAnswers,totalQuestions:(N=r.overallResult)==null?void 0:N.totalQuestions,subjectResults:(r.subjectResults||[]).map($e=>{var at;return{subjectName:$e.subjectName,percentage:(at=$e.percentage)!=null?at:0,correctAnswers:$e.correctAnswers,totalQuestions:$e.totalQuestions}})};case"getclassledger":return{studentId:(Y=r.StudentInfo)==null?void 0:Y.studentId,studentName:(ne=r.StudentInfo)==null?void 0:ne.student_name,class:(ie=r.StudentInfo)==null?void 0:ie.class_name,section:(ke=r.StudentInfo)==null?void 0:ke.section_name,percentage:(we=(_e=r.OverallResult)==null?void 0:_e.overallPercentage)!=null?we:0,grade:(ze=r.OverallResult)==null?void 0:ze.overallGrade,subjectScores:r.SubjectScores,correctAnswers:null,totalQuestions:null};case"generategesults":return{studentId:r.studentId,studentName:r.studentName,class:r.class,section:r.section,percentage:(ot=r.totalPercentage)!=null?ot:0,grade:r.grade,gradePoint:r.gradePoint,correctAnswers:r.totalAnswer,totalQuestions:r.totalQuestion};case"getStudentresult":return{studentId:(Me=r.studentInfo)==null?void 0:Me.studentId,studentName:(nt=r.studentInfo)==null?void 0:nt.studentName,class:(ut=r.studentInfo)==null?void 0:ut.class,section:(it=r.studentInfo)==null?void 0:it.section,percentage:(dt=(rt=r.overallResult)==null?void 0:rt.overallPercentage)!=null?dt:0,grade:(jt=r.overallResult)==null?void 0:jt.overallGrade,gradePoint:(kt=r.overallResult)==null?void 0:kt.overallGradePoint,correctAnswers:(Nt=r.overallResult)==null?void 0:Nt.correctAnswers,totalQuestions:(At=r.overallResult)==null?void 0:At.totalQuestions,subjectResults:(r.subjectResults||[]).map($e=>{var at;return{subjectName:$e.subjectName,percentage:(at=$e.percentage)!=null?at:0,grade:$e.grade,gradePoint:$e.gradePoint,correctAnswers:$e.correctAnswers,totalQuestions:$e.totalQuestions}})};default:return{}}}):[],oe=async()=>{var s,r;b.value=!0,C.value=[];const l=`api/onlineexamresult/${R.value}`,t={examterm:A.value,sc1:9438};E.value&&(t.class=E.value),S.value&&(t.exam_id=S.value),j.value&&R.value==="getsimplifiedledger"&&(t.section=j.value),R.value==="getStudentresult"&&O.value&&(t.student_id=`ENT${O.value}`);try{const f=await bt.get(l,{params:t});let h=d(f.data,R.value);h.sort((z,K)=>(K.percentage||0)-(z.percentage||0)),C.value=h,C.value.length===0?v.notify({type:"warning",message:"No records found.",position:"top"}):v.notify({type:"positive",message:`Success! Found ${C.value.length} records.`,position:"top"}),ve(C.value),Dt(()=>{Ce(),De()})}catch(f){console.error("API Error fetching report data:",f),v.notify({type:"negative",message:((r=(s=f.response)==null?void 0:s.data)==null?void 0:r.Message)||f.message||"Failed to fetch data.",position:"top",multiLine:!0})}finally{b.value=!1}},ve=l=>{let t=[{name:"studentId",label:"ID",field:"studentId",align:"left",sortable:!0},{name:"studentName",label:"Name",field:"studentName",align:"left",sortable:!0},{name:"class",label:"Class",field:"class",sortable:!0},{name:"section",label:"Section",field:"section",sortable:!0}];if(R.value==="getclassledger"&&l.length>0&&l[0].subjectScores){const s=Object.keys(l[0].subjectScores).map(r=>({name:r.replace(/\s+/g,""),label:r,field:f=>{var h;return((h=f.subjectScores[r])==null?void 0:h.toFixed(1))||"N/A"},align:"center",sortable:!0}));t.push(...s)}t.push({name:"totalQuestions",label:"Full Marks",field:"totalQuestions",align:"center",sortable:!0},{name:"correctAnswers",label:"Obtained",field:"correctAnswers",align:"center",sortable:!0},{name:"percentage",label:"Overall %",field:"percentage",align:"center",sortable:!0,style:"width: 150px"},{name:"grade",label:"Grade",field:"grade",align:"center",sortable:!0},{name:"actions",label:"Actions",field:"actions",align:"center",style:"width: 220px"}),_.value=t},Te=async l=>{le.show({message:"Generating PDF..."});let t=l;if(!l.subjectResults||l.subjectResults.length===0)try{const W=await bt.get("api/onlineexamresult/getStudentresult",{params:{student_id:l.studentId,examterm:A.value,sc1:9438}}),g=d(W.data,"getStudentresult");if(g.length>0)t=g[0];else throw new Error("Student details not found.")}catch{le.hide(),v.notify({type:"negative",message:"Could not fetch details to generate PDF."});return}const s=new qt,r=s.internal.pageSize.getWidth(),f=15;let h=20;s.setFont("helvetica","bold"),s.setFontSize(20),s.text("GOSARA CLOUD SCHOOL",r/2,h,{align:"center"}),h+=8,s.setFontSize(14),s.text(`Exam Term: ${A.value||"N/A"}`,r/2,h,{align:"center"}
1),h+=15,s.setFontSize(12),s.text("Student Grade Sheet",f,h),h+=8,s.setLineWidth(.5),s.line(f,h,r-f,h),h+=8,s.setFont("helvetica","normal"),s.text(`Student Name: ${t.studentName}`,f,h),s.text(`Class: ${t.class} - ${t.section}`,r-f,h,{align:"right"}),h+=7,s.text(`Student ID: ${t.studentId}`,f,h),h+=10;const z=[["Subject","Total Questions","Correct Answers","Percentage","Grade"]],K=t.subjectResults.map(W=>[W.subjectName,W.totalQuestions,W.correctAnswers,`${(W.percentage||0).toFixed(2)}%`,W.grade||"N/A"]);s.autoTable({head:z,body:K,startY:h,headStyles:{fillColor:[41,128,186]},didDrawPage:W=>{h=W.cursor.y}}),h+=15,s.setFont("helvetica","bold"),s.setFontSize(12),s.text("Overall Performance Summary",f,h),h+=8,s.setFont("helvetica","normal"),s.setFontSize(11),s.text(`Obtained Marks: ${t.correctAnswers||"N/A"} out of ${t.totalQuestions||"N/A"}`,f,h),h+=7,s.text(`Final Percentage: ${(t.percentage||0).toFixed(2)}%`,f,h),s.text(`Final Grade: ${t.grade||"N/A"}`,f+80,h);const te=s.internal.getNumberOfPages();for(let W=1;W<=te;W++)s.setPage(W),s.setFontSize(9),s.text(`Generated on: ${new Date().toLocaleDateString()}`,f,s.internal.pageSize.getHeight()-10),s.text(`Page ${W} of ${te}`,r-f,s.internal.pageSize.getHeight()-10,{align:"right"});s.save(`GradeSheet_${t.studentName}_${t.studentId}.pdf`),le.hide()},qe=async l=>{if($.value=l,de.value=l.studentName,I.value=!0,l.subjectResults&&l.subjectResults.length>0)H.value=l.subjectResults,ue();else{ae.value=!0;try{const t=await bt.get("api/onlineexamresult/getStudentresult",{params:{student_id:l.studentId,examterm:A.value,sc1:9438}}),s=d(t.data,"getStudentresult");s.length>0&&(H.value=s[0].subjectResults,$.value=s[0]),ue()}catch(t){console.error("Failed to fetch student details:",t),v.notify({type:"negative",message:"Could not load student details."})}finally{ae.value=!1}}},ue=()=>{m.value=[{name:"subjectName",label:"Subject",field:"subjectName",align:"left"},{name:"percentage",label:"Percentage",field:"percentage",align:"center",style:"width: 150px"},{name:"grade",label:"Grade",field:"grade",align:"center"},{name:"correctAnswers",label:"Correct",field:"correctAnswers",align:"center"},{name:"totalQuestions",label:"Total",field:"totalQuestions",align:"center"}]},Ce=()=>{if(!M.value||!C.value.length)return;x.value&&x.value.destroy();const l=M.value.getContext("2d");x.value=new _t(l,{type:"bar",data:{labels:C.value.map(t=>t.studentName),datasets:[{label:"Percentage Score",data:C.value.map(t=>t.percentage||0),backgroundColor:C.value.map(t=>Ie(t.percentage,!0)),borderColor:"#2c3e50",borderWidth:1}]},options:{responsive:!0,maintainAspectRatio:!1,scales:{y:{beginAtZero:!0,max:100}},plugins:{legend:{display:!1}}}})},De=()=>{Object.values(J.value).forEach(l=>l.destroy()),J.value={},V.value.forEach(l=>{const t=q.value[l.subject];t&&l.distributionData&&(J.value[l.subject]=new _t(t.getContext("2d"),{type:"doughnut",data:{labels:["Pass","Fail"],datasets:[{data:[l.distributionData.pass,l.distributionData.fail],backgroundColor:["rgba(76, 175, 80, 0.7)","rgba(244, 67, 54, 0.7)"],borderWidth:1}]},options:{responsive:!0,maintainAspectRatio:!1,plugins:{legend:{display:!1}}}}))})},Ie=(l,t=!1)=>{const s=l||0;return s>=90?t?"rgba(46, 125, 50, 0.8)":"positive":s>=70?t?"rgba(76, 175, 80, 0.8)":"green-7":s>=60?t?"rgba(139, 195, 74, 0.8)":"light-green-7":s>=50?t?"rgba(255, 193, 7, 0.8)":"amber-7":s>=40?t?"rgba(255, 152, 0, 0.8)":"orange-7":t?"rgba(244, 67, 54, 0.8)":"negative"},y=()=>
1{if(!C.value.length)return;const l=f=>`"${String(f==null?"":f).replace(/"/g,'""')}"`,t=_.value.filter(f=>f.field!=="actions").map(f=>l(f.label)).join(","),s=be.value.map(f=>_.value.filter(h=>h.field!=="actions").map(h=>{let z=typeof h.field=="function"?h.field(f):f[h.field];return h.name==="percentage"&&typeof z=="number"&&(z=z.toFixed(1)),l(z)}).join(",")),r=ra(`ExamResults_${A.value}.csv`,`${t} 2${s.join(` 3`)}`,"text/csv");v.notify({type:r?"positive":"negative",message:r?"Export successful!":"Export failed."})};return Qe(()=>E.value,l=>{l||(j.value=null)}),Qe(k,l=>{l==="subject"&&Dt(De)}),(l,t)=>(D(),ge(Le,{class:"q-pa-md"},{default:a(()=>[o("div",ls,[o("div",ss,[os,e(Tt,{class:"text-grey"},{default:a(()=>[e(Ee,{label:"Home"}),e(Ee,{label:"Results"})]),_:1})]),o("div",ns,[e(w,{color:"secondary",icon:"download",label:"Export Excel",onClick:y,disable:!C.value.length,unelevated:""},null,8,["disable"])])]),e(Z,{class:"q-mb-md"},{default:a(()=>[e(G,null,{default:a(()=>[us]),_:1}),e(G,null,{default:a(()=>[e(et,{onSubmit:Ze(oe,["prevent"])},{default:a(()=>[o("div",is,[o("div",rs,[e(se,{modelValue:R.value,"onUpdate:modelValue":t[0]||(t[0]=s=>R.value=s),options:Q,label:"Report Type",filled:"",dense:"","emit-value":"","map-options":"",rules:[B(yt).required]},null,8,["modelValue","rules"])]),o("div",ds,[e(se,{modelValue:A.value,"onUpdate:modelValue":t[1]||(t[1]=s=>A.value=s),options:B(Ct),label:"Exam Term",filled:"",dense:"",rules:[B(yt).required],"emit-value":"","map-options":""},null,8,["modelValue","options","rules"])]),o("div",cs,[e(se,{modelValue:E.value,"onUpdate:modelValue":t[2]||(t[2]=s=>E.value=s),options:B(vt),label:"Class",filled:"",dense:"","emit-value":"","map-options":""},null,8,["modelValue","options"])]),o("div",ms,[e(se,{modelValue:j.value,"onUpdate:modelValue":t[3]||(t[3]=s=>j.value=s),options:B(ca),label:"Section",filled:"",dense:"","emit-value":"","map-options":"",disable:!E.value},null,8,["modelValue","options","disable"])]),o("div",ps,[e(ee,{label:"Exam ID (Optional)",modelValue:S.value,"onUpdate:modelValue":t[4]||(t[4]=s=>S.value=s),filled:"",dense:"",type:"number"},null,8,["modelValue"])]),R.value==="getStudentresult"?(D(),X("div",vs,[e(ee,{modelValue:O.value,"onUpdate:modelValue":t[5]||(t[5]=s=>O.value=s),label:"Student ID",filled:"",dense:"",prefix:"ENT",rules:[B(yt).required]},null,8,["modelValue","rules"])])):me("",!0),o("div",fs,[e(w,{type:"submit",color:"primary",label:"View Report",class:"full-width",loading:b.value,unelevated:"",icon:"search"},null,8,["loading"])])])]),_:1},8,["onSubmit"])]),_:1})]),_:1}),e(Z,null,{default:a(()=>[e(zt,{modelValue:k.value,"onUpdate:modelValue":t[6]||(t[6]=s=>k.value=s),dense:"",class:"text-grey","active-color":"primary","indicator-color":"primary",align:"justify","narrow-indicator":""},{default:a(()=>[e(Ae,{name:"summary",label:"Summary"}),e(Ae,{name:"detailed",label:"Detailed View"}),e(Ae,{name:"subject",label:"Subject Analysis"})]),_:1},8,["modelValue"]),e(We),e(Ht,{modelValue:k.value,"onUpdate:modelValue":t[7]||(t[7]=s=>k.value=s),animated:""},{default:a(()=>[e(Pe,{name:"summary"},{default:a(()=>[C.value.length?(D(),X("div",gs,[o("div",bs,[o("div",ys,[e(Z,{class:"text-center",flat:"",bordered:""},{default:a(()=>[e(G,null,{default:a(()=>[hs,o("div",_s,T(B(U).avgPercentage.toFixed(1))+"% ",1)]),_:1})]),_:1})]),o("div",ws,[e(Z,{class:"text-center",flat:"",bordered:""},{default:a(()=>[e(G,null,{default:a(()=>[xs,o("div",Ss,T(B(U).topPerformer.name),1),o("div",Ts,T(B(U).topPerformer.percentage.toFixed(1))+"% ",1)]),_:1})]),_:1})]),o("div",Cs,[e(Z,{class:"text-center",flat:"",bordered:""},{default:a(()=>[e(G,null,{default:a(()=>[$s,o("div",Vs,T(B(U).passedCount)+" / "+T(C.value.length),1),o("div",qs," ("+T(B(U).passPercentage.toFixed(1))+"% pass rate) ",1)]),_:1})]),_:1})])]),o("div",Is,[o("canvas",{ref_key:"performanceChartCanvas",ref:M},null,512)])])):(D(),X("div",js,[e(Fe,{name:"info",size:"xl",class:"q-mb-sm"}),ks,Ns]))]),_:1}),e(Pe,{name:"detailed"},{default:a(()=>[e(Re,{rows:B(be),columns:_.value,"row-key":"uniqueRowId",loading:b.value,pagination:{rowsPerPage:20},flat:"",bordered:""},{"body-cell-actions":a(s=>[e(pe,{props:s,class:"q-gutter-sm"},{default:a(()=>[e(w,{icon:"visibility",label:"View",color:"primary",dense:"","no-caps":"",unelevated:"",onClick:r=>qe(s.row.originalData)},null,8,["onClick"]),e(w,{icon:"picture_as_pdf",label:"PDF",color:"red",dense:"","no-caps":"",unelevated:"",onClick:r=>Te(s.row.originalData)},null,8,["onClick"])]),_:2},1032,["props"])]),"body-cell-percentage":a(s=>[e(pe,{props:s},{default:a(()=>[e(Et,{value:s.row.percentage/100,color:Ie(s.row.percentage),stripe:"",rounded:"",style:{height:"20px"}},{default:a(()=>[o("div",As,[o("span",Ps,T(s.row.percentage.toFixed(1))+"% ",1)])]),_:2},1032,["value","color"])]),_:2},1032,["props"])]),_:1},8,["rows","columns","loading"])]),_:1}),e(Pe,{name:"subject"},{default:a(()=>[e(Re,{rows:B(V),columns:i.value,"row-key":"subject",flat:"",bordered:""},{"body-cell-distribution":a(s=>[e(pe,{props:s},{default:a(()=>[o("div",Fs,[o("canvas",{ref:r=>q.value[s.row.subject]=r},null,512)])]),_:2},1032,["props"])]),_:1},8,["rows","columns"])]),_:1})]),_:1},8,["modelValue"])]),_:1}),e(Ve,{modelValue:I.value,"onUpdate:modelValue":t[8]||(t[8]=s=>I.value=s),maximized:""},{default:a(()=>[e(Z,{style:{width:"800px","max-width":"90vw"}},{default:a(()=>[e(G,{class:"row items-center q-pb-none"},{default:a(()=>[Ds,e(Se),re(e(w,{icon:"close",flat:"",round:"",dense:""},null,512),[[fe]])]),_:1}),e(G,null,{default:a(()=>[o("div",Qs,[e(lt,{color:"primary","text-color":"white",icon:"person"},{default:a(()=>[P("Name: "+T(de.value||"N/A"),1)]),_:1}),e(lt,{color:"secondary","text-color":"white",icon:"school"},{default:a(()=>[P("Class: "+T($.value.class||"N/A"),1)]),_:1}),e(lt,{color:"accent","text-color":"white",icon:"class"},{default:a(()=>[P("Section: "+T($.value.section||"N/A"),1)]),_:1})]),ae.value?(D(),X("div",Es,[e(Gt,{color:"primary",size:"3em"})])):B(ye).length?(D(),X("div",Rs,[o("div",Ms,[o("div",Us,[e(Z,{class:"text-center",flat:"",bordered:""},{default:a(()=>[e(G,null,{default:a(()=>[Os,o("div",Bs,T(B(p).percentage.toFixed(1))+"% ",1),o("div",Gs," Grade: "+T(B(p).grade),1)]),_:1})]),_:1})]),o("div",Ls,[e(Z,{class:"text-center",flat:"",bordered:""},{default:a(()=>[e(G,null,{default:a(()=>[zs,o("div",Hs,T(B(p).correct)+"/"+T(B(p).total),1),o("div",Ys,T(B(p).gradePoint)+" GPA ",1)]),_:1})]),_:1})]),o("div",Ws,[e(Z,{class:"text-center",flat:"",bordered:""},{default:a(()=>[e(G,null,{default:a(()=>
3[Xs,e(ia,{"show-value":"","font-size":"16px",value:B(p).percentage,size:"90px",thickness:.2,color:Ie(B(p).percentage),class:"q-ma-sm"},{default:a(()=>[P(T(B(p).percentage.toFixed(1))+"%",1)]),_:1},8,["value","thickness","color"])]),_:1})]),_:1})])]),e(Re,{title:"Subject Breakdown",rows:B(ye),columns:m.value,"row-key":"uniqueRowId",flat:"",bordered:""},{"body-cell-percentage":a(s=>[e(pe,{props:s},{default:a(()=>[e(Et,{value:s.row.percentage/100,color:Ie(s.row.percentage),stripe:"",rounded:"",style:{height:"20px"}},{default:a(()=>[o("div",Js,[o("span",Ks,T(s.row.percentage.toFixed(1))+"%",1)])]),_:2},1032,["value","color"])]),_:2},1032,["props"])]),_:1},8,["rows","columns"])])):me("",!0)]),_:1})]),_:1})]),_:1},8,["modelValue"])]),_:1}))}},eo={class:"q-pa-md"},to={class:"row items-center q-col-gutter-md"},ao={class:"col-12 col-md-3"},lo={class:"col-12 col-md-3"},so={class:"col-auto"},oo={class:"col-auto text-right"},no={class:"text-subtitle2"},uo={class:"text-h6"},io={class:"row q-col-gutter-md"},ro={class:"col-12 col-sm-6"},co={class:"col-12 col-sm-6"},mo={class:"row q-col-gutter-md"},po={class:"col-12 col-sm-6"},vo={__name:"TopicManage",setup(F){const v=tt(),E=Ke(),j=parseInt(E.getSchoolCode,10)||101,A=u([]),S=u({topicGrade:"",topic:"",sc1:null}),O=u(!1),R=u(!1),Q=u(!1),k=u(!1),b=u({Tranno:null,TopicGrade:null,Topic:null,Bookname:null,sc1:j}),C=u({sortBy:"Tranno",descending:!0,page:1,rowsPerPage:10}),_=u(!1),M=u(null),x=u(null),q=u(null),J=u(vt),I=u([]),$=u([]),H=u([]),m=[{name:"Tranno",label:"ID",field:"Tranno",align:"left",sortable:!0},{name:"TopicGrade",label:"Topic Grade",field:"TopicGrade",align:"left",sortable:!0},{name:"Topic",label:"Topic",field:"Topic",align:"left",sortable:!0},{name:"Bookname",label:"Book Name",field:"Bookname",align:"left",sortable:!0},{name:"actions",label:"Actions",field:"actions",align:"right"}],ae=xe(()=>A.value.filter(l=>{const t=!S.value.topicGrade||l.TopicGrade.toLowerCase().includes(S.value.topicGrade.toLowerCase()),s=!S.value.topic||l.Topic.toLowerCase().includes(S.value.topic.toLowerCase()),r=l.sc1===j;return t&&s&&r})),de=xe(()=>ae.value.length),be=l=>({Tranno:l.tranno,TopicGrade:l.topicGrade,Topic:l.topic,Bookname:l.bookname,sc1:l.sc1}),ye=async()=>{O.value=!0;try{const l=await L.get(`/api/subjectTopic/bytopic/${j}`);A.value=Array.isArray(l.data)?l.data.map(be):[];const t=new Set(A.value.map(s=>s.Bookname).filter(Boolean));$.value=Array.from(t)}catch(l){console.error("Failed to fetch subject topic list:",l),l.response&&l.response.status===404?(A.value=[],he.create({type:"info",message:"No subject topics found for this school code."})):he.create({type:"negative",message:"Failed to fetch subject topics."})}finally{O.value=!1}},U=async l=>{if(I.value=[],!!l)try{const t=await L.get(`/api/subjectTopic/bygrade/${encodeURIComponent(l)}/${j}`),s=Array.isArray(t.data)?t.data.map(r=>r.topic).filter(Boolean):[];b.value.Topic&&!s.includes(b.value.Topic)&&s.unshift(b.value.Topic),I.value=s}catch(t){console.error("Failed to fetch topics by grade:",t),t.response&&t.response.status===404?I.value=[]:he.create({type:"negative",message:"Failed to load topics for this grade."})}},V=async l=>{b.value.Topic=null,await U(l),x.value&&x.value.validate()},i=(l,t)=>{t(()=>{const s=l.toLowerCase();let r=[];I.value&&I.value.length>0&&(r=I.value.filter(f=>f&&String(f).toLowerCase().includes(s))),l&&!r.includes(l)&&r.unshift(l),I.value=r})},p=(l,t)=>{l&&!I.value.includes(l)&&I.value.push(l),t(l,"add-unique")},d=(l,t)=>{t(()=>{const s=l.toLowerCase();let r=[];$.value&&$.value.length>0&&(r=$.value.filter(f=>f&&String(f).toLowerCase().includes(s))),l&&!r.includes(l)&&r.unshift(l),H.value=r})},oe=(l,t)=>{l&&!$.value.includes(l)&&$.value.push(l),t(l,"add-unique")},ve=(l,t,s=!1)=>s&&(l===null||l==="")?!0:l?t.some(r=>String(r)===String(l)):!1,Te=()=>({Tranno:null,TopicGrade:null,Topic:null,Bookname:null,sc1:j}),qe=()=>{k.value=!1,b.value=Te(),I.value=[],H.value=[...$.value],Q.value=!0,M.value&&M.value.resetValidation()},ue=async l=>{k.value=!0,b.value={...l},b.value.TopicGrade?await U(b.value.TopicGrade):I.value=[],b.value.Topic&&!I.value.includes(b.value.Topic)&&I.value.unshift(b.value.Topic),H.value=[...$.value],b.value.Bookname&&!H.value.includes(b.value.Bookname)&&H.value.unshift(b.value.Bookname),Q.value=!0,M.value&&M.value.resetValidation()},Ce=async()=>
3{if(!await M.value.validate()){v.notify({type:"negative",message:"Please correct the form errors."});return}R.value=!0;const t={...b.value,sc1:parseInt(b.value.sc1,10)};t.Topic=t.Topic||"",t.Bookname=t.Bookname||null;try{k.value?(await L.put(`/api/subjectTopic/${t.Tranno}`,t),he.create({type:"positive",message:"Subject Topic updated successfully."})):(await L.post("/api/subjectTopic",t),he.create({type:"positive",message:"Subject Topic created successfully."}),t.Bookname&&!$.value.includes(t.Bookname)&&$.value.push(t.Bookname),b.value=Te()),await ye(),Q.value=!1}catch(s){console.error("API submission failed:",s.response||s);let r="An unexpected error occurred.";if(s.response){if(s.response.status===409)r="A subject topic with the same Topic Grade and Topic already exists for this school.";else if(s.response.status===500){if(r="Server error: Failed to process your request. Please try again.",s.response.data&&s.response.data.Message)r=s.response.data.Message;else if(s.response.data&&typeof s.response.data=="object"){const f=s.response.data,h=Object.values(f).flat()[0];h&&(r=h)}}else if(s.response.data&&s.response.data.Message)r=s.response.data.Message;else if(s.response.data&&typeof s.response.data=="object"){const f=s.response.data,h=Object.values(f).flat()[0];h&&(r=h)}}he.create({type:"negative",message:r})}finally{R.value=!1}},De=l=>{v.dialog({title:"Confirm Deletion",message:`Are you sure you want to delete topic "${l.Topic}" (${l.TopicGrade})? This action cannot be undone.`,cancel:!0,persistent:!0}).onOk(async()=>{try{await L.delete(`/api/subjectTopic/${l.Tranno}`),he.create({type:"positive",message:"Subject Topic deleted successfully."}),await ye()}catch(t){console.error("Delete failed:",t),he.create({type:"negative",message:"Failed to delete subject topic. It might be in use or an internal server error occurred."})}})},Ie=()=>{S.value={topicGrade:"",topic:"",sc1:null}},y=async()=>{_.value=!0;const l=ae.value;if(l.length===0){he.create({type:"warning",message:"No subject topics to export with current filters."}),_.value=!1;return}le.show({message:`Generating PDF for ${l.length} topics...`});try{const t=new qt({orientation:"p",unit:"mm",format:"a4"}),s=t.internal.pageSize.getWidth(),r=t.internal.pageSize.getHeight(),f=10,h=3;t.setFont("helvetica","bold"),t.setFontSize(14),t.text("Subject Topic List",s/2,f+5,{align:"center"});const z=["ID","Topic Grade","Topic","Book Name"],K=[s*.12,s*.23,s*.38,s*.27].map(c=>c-2*f/z.length);let te=f+15,W=1;const g=()=>{t.setFont("helvetica","bold"),t.setFontSize(9),t.setFillColor(230,230,230),t.setTextColor(0,0,0);let c=f;z.forEach((n,N)=>{t.rect(c,te,K[N],7,"F"),t.text(n,c+h,te+5),c+=K[N]}),te+=7,t.setFont("helvetica","normal"),t.setFontSize(8),t.text(`Page ${W}`,s-f,r-5,{align:"right"})};g(),l.forEach(c=>{te+7>r-f&&(t.addPage(),W++,te=f,g()),t.setTextColor(0,0,0);let N=f;t.text(`${c.Tranno||""}`,N+h,te+5),N+=K[0],t.text(`${c.TopicGrade||""}`,N+h,te+5),N+=K[1],t.text(`${c.Topic||""}`,N+h,te+5),N+=K[2],t.text(`${c.Bookname||""}`,N+h,te+5),te+=7}),t.save(`subject-topics-${new Date().toISOString().slice(0,10)}.pdf`)}catch(t){console.error("PDF generation failed:",t),he.create({type:"negative",message:"Failed to generate PDF."})}finally{_.value=!1,le.hide()}};return Ge(ye),(l,t)=>(D(),ge(Le,{padding:""},{default:a(()=>[o("div",eo,[e($t,{class:"q-mb-md rounded-borders"},{default:a(()=>[e(Vt,{class:"text-subtitle1"},{default:a(()=>[P("Subject Topic Management")]),_:1}),e(Se),e(w,{color:"secondary",icon:"picture_as_pdf",label:"Export PDF",onClick:y,loading:_.value,"no-caps":"",class:"q-mr-sm"},null,8,["loading"]),e(w,{color:"primary",icon:"add",label:"New Subject Topic",onClick:qe,"no-caps":""})]),_:1}),e(Z,{class:"q-mb-md",flat:"",bordered:""},{default:a(()=>[e(G,{class:"q-pa-sm"},{default:a(()=>[o("div",to,[o("div",ao,[e(ee,{dense:"",outlined:"",modelValue:S.value.topicGrade,"onUpdate:modelValue":t[0]||(t[0]=s=>S.value.topicGrade=s),label:"Search by Topic Grade",clearable:""},null,8,["modelValue"])]),o("div",lo,[e(ee,{dense:"",outlined:"",modelValue:S.value.topic,"onUpdate:modelValue":t[1]||(t[1]=s=>S.value.topic=s),label:"Search by Topic",clearable:""},null,8,["modelValue"])]),o("div",so,[e(w,{label:"Reset Filters",onClick:Ie,color:"grey",flat:"","no-caps":""})]),e(Se),o("div",oo,[o("span",no,"Total Topics: "+T(B(de)),1)])])]),_:1})]),_:1}),e(Re,{rows:B(ae),columns:m,"row-key":"Tranno",pagination:C.value,"onUpdate:pagination":t[2]||(t[2]=s=>C.value=s),loading:O.value,"no-data-label":"No subject topics foun
3d"},{"body-cell-actions":a(s=>[e(pe,{props:s},{default:a(()=>[e(w,{flat:"",round:"",dense:"",icon:"edit",onClick:r=>ue(s.row),color:"info","aria-label":"Edit"},null,8,["onClick"]),e(w,{flat:"",round:"",dense:"",icon:"delete",onClick:r=>De(s.row),color:"negative","aria-label":"Delete"},null,8,["onClick"])]),_:2},1032,["props"])]),_:1},8,["rows","pagination","loading"])]),e(Ve,{modelValue:Q.value,"onUpdate:modelValue":t[6]||(t[6]=s=>Q.value=s),persistent:""},{default:a(()=>[e(Z,{style:{width:"700px","max-width":"80vw"}},{default:a(()=>[e(G,{class:"row items-center q-pb-none"},{default:a(()=>[o("div",uo,T(k.value?"Edit":"Create")+" Subject Topic ",1),e(Se),re(e(w,{icon:"close",flat:"",round:"",dense:""},null,512),[[fe]])]),_:1}),e(G,null,{default:a(()=>[e(et,{onSubmit:Ze(Ce,["prevent"]),class:"q-gutter-y-md",ref_key:"formRef",ref:M},{default:a(()=>[o("div",io,[o("div",ro,[e(se,{filled:"",modelValue:b.value.TopicGrade,"onUpdate:modelValue":[t[3]||(t[3]=s=>b.value.TopicGrade=s),V],options:J.value,label:"Topic Grade *","lazy-rules":"",rules:[s=>!!s||"Topic Grade is required"]},null,8,["modelValue","options","rules"])]),o("div",co,[e(se,{filled:"",modelValue:b.value.Topic,"onUpdate:modelValue":t[4]||(t[4]=s=>b.value.Topic=s),options:I.value,label:"Topic *","use-input":"","hide-selected":"","fill-input":"","input-debounce":"0",onFilter:i,onNewValue:p,"lazy-rules":"",ref_key:"topicSelectRef",ref:x,rules:[s=>!!s||"Topic is required",s=>ve(s,I.value,!1)||"Please select an existing topic or type a new one."]},{"no-option":a(()=>[e(Oe,null,{default:a(()=>[e(Ne,{class:"text-grey"},{default:a(()=>[P(" No topics found. Type to add a new one. ")]),_:1})]),_:1})]),_:1},8,["modelValue","options","rules"])])]),o("div",mo,[o("div",po,[e(se,{filled:"",modelValue:b.value.Bookname,"onUpdate:modelValue":t[5]||(t[5]=s=>b.value.Bookname=s),options:H.value,label:"Book Name","use-input":"","hide-selected":"","fill-input":"","input-debounce":"0",onFilter:d,onNewValue:oe,ref_key:"booknameSelectRef",ref:q,rules:[s=>ve(s,H.value,!0)||"Please select an existing book name or type a new one."]},{"no-option":a(()=>[e(Oe,null,{default:a(()=>[e(Ne,{class:"text-grey"},{default:a(()=>[P(" No book names found. Type to add a new one. ")]),_:1})]),_:1})]),_:1},8,["modelValue","options","rules"])])]),e(je,{align:"right"},{default:a(()=>[re(e(w,{label:"Cancel",color:"grey",flat:""},null,512),[[fe]]),e(w,{label:k.value?"Update":"Create",type:"submit",color:"primary",loading:R.value},null,8,["label","loading"])]),_:1})]),_:1},8,["onSubmit"])]),_:1})]),_:1})]),_:1},8,["modelValue"])]),_:1}))}},fo=pt(vo,[["__scopeId","data-v-a87c935d"]]),Xt=F=>(wt("data-v-0e98fd4d"),F=F(),xt(),F),go={key:0,class:"fullscreen column flex-center bg-white"},bo=Xt(()=>o("p",{class:"q-mt-md text-primary"},"Verifying Online Exam System Access...",-1)),yo={key:1,class:"fullscreen column flex-center text-center"},ho=Xt(()=>o("div",{class:"text-h4 q-mt-md text-negative"}," Online Exam System Inactive ",-1)),_o={class:"text-h6 q-mt-md"},wo={key:2,class:"exam-management"},xo={class:"q-mb-lg"},So={class:"text-h4 text-primary"},To={class:"text-subtitle1 q-mt-sm"},Co={class:"text-caption text-grey q-mt-xs"},$o={__name:"MasterAdminEexamManage",setup(F){sa();const v=Ke(),E=u(v.getSchoolCode),j=u(!0),A=u(!1),S=u("Checking exam system status..."),O=u(null),R=u({title:"",description:"",startTime:null,endTime:null,status:"",ballotType:""}),Q=u("subject"),k=xe(()=>{var x;if(!((x=O.value)!=null&&x.deactivationTime))return 0;const M=new Date(O.value.deactivationTime)-new Date;return Math.floor(M/(1e3*60*60*24))}),b=xe(()=>{var x;if(!((x=O.value)!=null&&x.deactivationTime))return 0;const M=new Date(O.value.deactivationTime)-new Date;return Math.floor(M/(1e3*60*60))}),C=M=>{if(!M)return"";const x={year:"numeric",month:"short",day:"numeric",hour:"2-digit",minute:"2-digit"};return new Date(M).toLocaleDateString(void 0,x)},_=async()=>{var M,x;try{if(!E.value)throw new Error("Organization not identified");const q=await L.get(`/api/votemenu/byname/eexam/${E.value}`);if(q.data){O.value=q.data;const J=new Date,I=new Date(O.value.activationTime),$=new Date(O.value.deactivationTime);if(A.value=J>=I&&J<=$,!A.value)S.value=J<I?`Exam system will activate on ${C(I)}`:`Exam system expired on ${C($)}`;else{const H=await L.get(`/api/votemenu/active/${E.value}`);
3H.data&&(R.value={title:H.data.title,description:H.data.description,startTime:H.data.startTime,endTime:H.data.endTime,status:H.data.status,ballotType:H.data.ballotType})}}else S.value="Online Exam system not configured",A.value=!1}catch(q){console.error("Error:",q),S.value=((x=(M=q.response)==null?void 0:M.data)==null?void 0:x.message)||"Error verifying exam system status",A.value=!1}finally{j.value=!1}};return Ge(()=>{_()}),(M,x)=>(D(),ge(Le,{class:"q-pa-md"},{default:a(()=>[j.value?(D(),X("div",go,[e(Ut,{color:"primary",size:"xl"}),bo])):A.value?(D(),X("div",wo,[o("div",xo,[o("div",So,T(R.value.title),1),o("div",To,T(R.value.description),1),o("div",Co," Exam Period: "+T(C(R.value.startTime))+" to "+T(C(R.value.endTime)),1)]),e(ct,{class:"bg-blue-1 q-mb-md"},{avatar:a(()=>[e(Fe,{name:"info",color:"blue"})]),default:a(()=>[P(" Online Exam system active until "+T(C(O.value.deactivationTime))+" ",1),B(k)>0?(D(),X(Je,{key:0},[P(" ("+T(B(k))+" days remaining) ",1)],64)):B(b)>0?(D(),X(Je,{key:1},[P(" ("+T(B(b))+" hours remaining) ",1)],64)):(D(),X(Je,{key:2},[P(" (Expires soon) ")],64))]),_:1}),e(zt,{modelValue:Q.value,"onUpdate:modelValue":x[1]||(x[1]=q=>Q.value=q),align:"left",dense:"",class:"bg-grey-2 text-primary shadow-2 q-mb-md"},{default:a(()=>[e(Ae,{name:"subject",icon:"people",label:"Subject Management"}),e(Ae,{name:"Topic",icon:"how_to_vote",label:"Topic Management"}),e(Ae,{name:"question-bank",icon:"help",label:"Question Management"}),e(Ae,{name:"exam-manage",icon:"how_to_vote",label:"Exam Management"}),e(Ae,{name:"entrance-manage",icon:"people",label:"Exam Candidates"}),e(Ae,{name:"results",icon:"bar_chart",label:"Exam Results"})]),_:1},8,["modelValue"]),e(Ht,{modelValue:Q.value,"onUpdate:modelValue":x[2]||(x[2]=q=>Q.value=q),animated:""},{default:a(()=>[e(Pe,{name:"subject"},{default:a(()=>[e(Ta,{"tenant-id":E.value},null,8,["tenant-id"])]),_:1}),e(Pe,{name:"Topic"},{default:a(()=>[e(fo,{"tenant-id":E.value},null,8,["tenant-id"])]),_:1}),e(Pe,{name:"question-bank"},{default:a(()=>[e(cl,{"tenant-id":E.value},null,8,["tenant-id"])]),_:1}),e(Pe,{name:"exam-manage"},{default:a(()=>[e(Sl,{"tenant-id":E.value},null,8,["tenant-id"])]),_:1}),e(Pe,{name:"entrance-manage"},{default:a(()=>[e(as,{"tenant-id":E.value},null,8,["tenant-id"])]),_:1}),e(Pe,{name:"results"},{default:a(()=>[e(Zs,{"tenant-id":E.value},null,8,["tenant-id"])]),_:1})]),_:1},8,["modelValue"])])):(D(),X("div",yo,[e(Fe,{name:"lock",color:"negative",size:"100px"}),ho,o("p",_o,T(S.value),1),e(w,{color:"primary",label:"Back to Dashboard",onClick:x[0]||(x[0]=q=>M.$router.push("/")),class:"q-mt-md"})]))]),_:1}))}},mn=pt($o,[["__scopeId","data-v-0e98fd4d"]]);export{mn 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.