import{_ as G,c as d,o as r,a as o,d as w,F as X,p as K,t as n,m as j,w as I,e as m,v as h,A as U,B as N,n as H,x as J,r as u,k as Q,l as y}from"./index-DpP9cWht.js";const Y={name:"ISOImages",setup(){const p=J(),e=u([]),k=u(!1),t=u(!1),x=u(!1),c=u(0),a=u(0),f=u(0),g=u(0),D=u(!1),B=u(!1),F=u(null);let V=null;const b=u({name:"",os_type:"",version:"",architecture:"amd64"}),M=u({url:"",name:"",os_type:"",version:"",architecture:"amd64"}),_=async()=>{k.value=!0;try{const l=await y.isos.list();e.value=l.data}catch(l){console.error("Failed to fetch ISOs:",l)}finally{k.value=!1}},P=l=>{const s=l.target.files[0];s&&(F.value=s,b.value.name||(b.value.name=s.name.replace(".iso","")))},A=async()=>{if(F.value){t.value=!0,c.value=0,V=Date.now();try{const l=new FormData;l.append("file",F.value),l.append("name",b.value.name),l.append("os_type",b.value.os_type),l.append("version",b.value.version),l.append("architecture",b.value.architecture);const s=i=>{if(i.total){const S=Math.round(i.loaded*50/i.total);c.value=S,a.value=i.loaded,f.value=i.total;const T=(Date.now()-V)/1e3;T>0&&(g.value=i.loaded/T)}},O=(await y.isos.upload(l,s)).data.id;p.info("Upload complete, processing file...",{timeout:2e3});let C=!1;for(;!C;){await new Promise(i=>setTimeout(i,500));try{const S=(await y.isos.getProgress(O)).data;if(S.status==="completed")c.value=100,C=!0,p.success("ISO uploaded and processed successfully");else{if(S.status==="error")throw new Error(S.message||"Processing failed");c.value=50+Math.round(S.progress/2)}}catch(i){console.warn("Failed to get progress, assuming complete:",i),C=!0,c.value=100}}await new Promise(i=>setTimeout(i,500)),D.value=!1,b.value={name:"",os_type:"",version:"",architecture:"amd64"},F.value=null,a.value=0,f.value=0,g.value=0,await _()}catch(l){console.error("Failed to upload ISO:",l),p.error("Failed to upload ISO: "+(l.message||"Unknown error"))}finally{t.value=!1,c.value=0,a.value=0,f.value=0,g.value=0}}},W=async l=>{const s=p.info("Checking ISO checksum...",{timeout:!1});try{const v=await y.isos.verify(l);p.dismiss(s),v.data.status==="valid"?p.success("ISO checksum is valid"):p.error("ISO checksum verification failed")}catch(v){p.dismiss(s),console.error("Failed to verify ISO:",v)}},L=async l=>{if(confirm("Are you sure you want to delete this ISO image?"))try{await y.isos.delete(l),p.success("ISO deleted successfully"),await _()}catch(s){console.error("Failed to delete ISO:",s)}},R=l=>({ubuntu:"Ubuntu",debian:"Debian",centos:"CentOS",rocky:"Rocky Linux",alma:"AlmaLinux",windows_server_2019:"Windows Server 2019",windows_server_2022:"Windows Server 2022",windows_10:"Windows 10",windows_11:"Windows 11"})[l]||l,q=l=>{if(!l)return"0 B";const s=["B","KB","MB","GB","TB"],v=Math.floor(Math.log(l)/Math.log(1024));return Math.round(l/Math.pow(1024,v)*100)/100+" "+s[v]},z=()=>{if(g.value===0||a.value===0)return"Calculating...";const s=(f.value-a.value)/g.value;if(s<60)return Math.ceil(s)+"s";if(s<3600){const v=Math.floor(s/60),O=Math.ceil(s%60);return`${v}m ${O}s`}else{const v=Math.floor(s/3600),O=Math.ceil(s%3600/60);return`${v}h ${O}m`}},E=async()=>{x.value=!0;try{await y.isos.downloadFromUrl(M.value),p.success("ISO download started successfully"),B.value=!1,M.value={url:"",name:"",os_type:"",version:"",architecture:"amd64"},await _()}catch(l){console.error("Failed to download ISO:",l)}finally{x.value=!1}};return Q(()=>{_()}),{isos:e,loading:k,uploading:t,downloading:x,uploadProgress:c,uploadedBytes:a,totalBytes:f,uploadSpeed:g,showUploadModal:D,showDownloadModal:B,selectedFile:F,uploadForm:b,downloadForm:M,onFileSelected:P,uploadISO:A,downloadFromUrl:E,verifyISO:W,deleteISO:L,formatOSType:R,formatBytes:q,formatTimeRemaining:z}}},Z={class:"iso-images-page"},$={class:"card"},oo={class:"card-header"},eo={class:"flex gap-1"},to={key:0,class:"loading-spinner"},ao={key:1,class:"text-center text-muted"},lo={key:2,class:"table-container"},so={class:"table"},no={class:"badge badge-info"},io={class:"text-xs text-muted"},ro={class:"flex gap-1"},uo=["onClick"],po=["onClick"],vo={class:"modal-header"},mo={class:"form-group"},co={key:0,class:"text-sm text-muted mt-1"},bo={class:"form-group"},fo={class:"form-group"},wo={class:"grid grid-cols-2 gap-2"},go={class:"form-group"},So={class:"form-group"},yo={key:0,class:"upload-progress"},Fo={class:"upload-stats"},Oo={class:"stat-row"},ho={class:"stat-value"},ko={class:"stat-row"},xo={class:"stat-value"},_o={key:0,class:"stat-row"},Io={class:"stat-value"},Uo={key:1,class:"stat-row"},Mo={class:"stat-value"},Co={class:"progress-bar"},Do={class:"flex gap-1 mt-2"},Bo=["disabled"],Vo=["disabled"],To={class:"modal-header"},No={class:"form-group"},Po={class:"form-group"},Ao={class:"form-group"},Wo={class:"grid grid-cols-2 gap-2"},Lo={class:"form-group"},Ro={class:"form-group"},qo={key:0,class:"upload-progress"},zo={class:"flex gap-1 mt-2"},Eo=["disabled"],Go=["disabled"];function Xo(p,e,k,t,x,c){return r(),d("div",Z,[o("div",$,[o("div",oo,[e[22]||(e[22]=o("h3",null,"ISO Images",-1)),o("div",eo,[o("button",{onClick:e[0]||(e[0]=a=>t.showUploadModal=!0),class:"btn btn-primary"},"+ Upload ISO"),o("button",{onClick:e[1]||(e[1]=a=>t.showDownloadModal=!0),class:"btn btn-outline"},"Download from URL")])]),t.loading?(r(),d("div",to)):t.isos.length===0?(r(),d("div",ao,[...e[23]||(e[23]=[o("p",null,"No ISO images uploaded yet.",-1),o("p",{class:"text-sm"},"Upload ISOs to deploy VMs.",-1)])])):(r(),d("div",lo,[o("table",so,[e[24]||(e[24]=o("thead",null,[o("tr",null,[o("th",null,"Name"),o("th",null,"OS Type"),o("th",null,"Version"),o("th",null,"Architecture"),o("th",null,"Size"),o("th",null,"Checksum"),o("th",null,"Status"),o("th",null,"Actions")])],-1)),o("tbody",null,[(r(!0),d(X,null,K(t.isos,a=>(r(),d("tr",{key:a.id},[o("td",null,n(a.name),1),o("td",null,[o("span",no,n(t.formatOSType(a.os_type)),1)]),o("td",null,n(a.version||"N/A"),1),o("td",null,n(a.architecture),1),o("td",null,n(t.formatBytes(a.file_size)),1),o("td",io,n(a.checksum?a.checksum.substring(0,16)+"...":"N/A"),1),o("td",null,[o("span",{class:j(["badge",a.is_available?"badge-success":"badge-danger"])},n(a.is_available?"Available":"Unavailable"),3)]),o("td",null,[o("div",ro,[o("button",{onClick:f=>t.verifyISO(a.id),class:"btn btn-outline btn-sm"},"Verify",8,uo),o("button",{onClick:f=>t.deleteISO(a.id),class:"btn btn-danger btn-sm"},"Delete",8,po)])])]))),128))])])]))]),t.showUploadModal?(r(),d("div",{key:0,class:"modal",onClick:e[11]||(e[11]=a=>t.showUploadModal=!1)},[o("div",{class:"modal-content",onClick:e[10]||(e[10]=I(()=>{},["stop"]))},[o("div",vo,[e[25]||(e[25]=o("h3",null,"Upload ISO Image",-1)),o("button",{onClick:e[2]||(e[2]=a=>t.showUploadModal=!1),class:"btn-close"},"×")]),o("form",{onSubmit:e[9]||(e[9]=I((...a)=>t.uploadISO&&t.uploadISO(...a),["prevent"])),class:"modal-body"},[o("div",mo,[e[26]||(e[26]=o("label",{class:"form-label"},"ISO File *",-1)),o("input",{type:"file",onChange:e[3]||(e[3]=(...a)=>t.onFileSelected&&t.onFileSelected(...a)),accept:".iso",class:"form-control",required:""},null,32),t.selectedFile?(r(),d("p",co," Selected: "+n(t.selectedFile.name)+" ("+n(t.formatBytes(t.selectedFile.size))+") ",1)):w("",!0)]),o("div",bo,[e[27]||(e[27]=o("label",{class:"form-label"},"Display Name *",-1)),m(o("input",{"onUpdate:modelValue":e[4]||(e[4]=a=>t.uploadForm.name=a),class:"form-control",required:""},null,512),[[h,t.uploadForm.name]])]),o("div",fo,[e[29]||(e[29]=o("label",{class:"form-label"},"OS Type *",-1)),m(o("select",{"onUpdate:modelValue":e[5]||(e[5]=a=>t.uploadForm.os_type=a),class:"form-control",required:""},[...e[28]||(e[28]=[N('',5)])],512),[[U,t.uploadForm.os_type]])]),o("div",wo,[o("div",go,[e[30]||(e[30]=o("label",{class:"form-label"},"Version",-1)),m(o("input",{"onUpdate:modelValue":e[6]||(e[6]=a=>t.uploadForm.version=a),class:"form-control",placeholder:"22.04"},null,512),[[h,t.uploadForm.version]])]),o("div",So,[e[32]||(e[32]=o("label",{class:"form-label"},"Architecture",-1)),m(o("select",{"onUpdate:modelValue":e[7]||(e[7]=a=>t.uploadForm.architecture=a),class:"form-control"},[...e[31]||(e[31]=[o("option",{value:"amd64"},"amd64 (x86_64)",-1),o("option",{value:"arm64"},"arm64",-1)])],512),[[U,t.uploadForm.architecture]])])]),t.uploading?(r(),d("div",yo,[o("div",Fo,[o("div",Oo,[e[33]||(e[33]=o("span",{class:"stat-label"},"Progress:",-1)),o("span",ho,n(t.uploadProgress)+"%",1)]),o("div",ko,[e[34]||(e[34]=o("span",{class:"stat-label"},"Transferred:",-1)),o("span",xo,n(t.formatBytes(t.uploadedBytes))+" / "+n(t.formatBytes(t.totalBytes)),1)]),t.uploadSpeed>0?(r(),d("div",_o,[e[35]||(e[35]=o("span",{class:"stat-label"},"Speed:",-1)),o("span",Io,n(t.formatBytes(t.uploadSpeed))+"/s",1)])):w("",!0),t.uploadSpeed>0&&t.uploadProgress<100?(r(),d("div",Uo,[e[36]||(e[36]=o("span",{class:"stat-label"},"Time remaining:",-1)),o("span",Mo,n(t.formatTimeRemaining()),1)])):w("",!0)]),o("div",Co,[o("div",{class:"progress-fill",style:H({width:t.uploadProgress+"%"})},null,4)])])):w("",!0),o("div",Do,[o("button",{type:"submit",class:"btn btn-primary",disabled:t.uploading||!t.selectedFile},n(t.uploading?"Uploading...":"Upload ISO"),9,Bo),o("button",{type:"button",onClick:e[8]||(e[8]=a=>t.showUploadModal=!1),class:"btn btn-outline",disabled:t.uploading}," Cancel ",8,Vo)])],32)])])):w("",!0),t.showDownloadModal?(r(),d("div",{key:1,class:"modal",onClick:e[21]||(e[21]=a=>t.showDownloadModal=!1)},[o("div",{class:"modal-content",onClick:e[20]||(e[20]=I(()=>{},["stop"]))},[o("div",To,[e[37]||(e[37]=o("h3",null,"Download ISO from URL",-1)),o("button",{onClick:e[12]||(e[12]=a=>t.showDownloadModal=!1),class:"btn-close"},"×")]),o("form",{onSubmit:e[19]||(e[19]=I((...a)=>t.downloadFromUrl&&t.downloadFromUrl(...a),["prevent"])),class:"modal-body"},[o("div",No,[e[38]||(e[38]=o("label",{class:"form-label"},"ISO URL *",-1)),m(o("input",{"onUpdate:modelValue":e[13]||(e[13]=a=>t.downloadForm.url=a),type:"url",class:"form-control",placeholder:"https://example.com/path/to/image.iso",required:""},null,512),[[h,t.downloadForm.url]]),e[39]||(e[39]=o("p",{class:"text-xs text-muted mt-1"},"Direct link to the ISO file",-1))]),o("div",Po,[e[40]||(e[40]=o("label",{class:"form-label"},"Display Name *",-1)),m(o("input",{"onUpdate:modelValue":e[14]||(e[14]=a=>t.downloadForm.name=a),class:"form-control",required:""},null,512),[[h,t.downloadForm.name]])]),o("div",Ao,[e[42]||(e[42]=o("label",{class:"form-label"},"OS Type *",-1)),m(o("select",{"onUpdate:modelValue":e[15]||(e[15]=a=>t.downloadForm.os_type=a),class:"form-control",required:""},[...e[41]||(e[41]=[N('',5)])],512),[[U,t.downloadForm.os_type]])]),o("div",Wo,[o("div",Lo,[e[43]||(e[43]=o("label",{class:"form-label"},"Version",-1)),m(o("input",{"onUpdate:modelValue":e[16]||(e[16]=a=>t.downloadForm.version=a),class:"form-control",placeholder:"22.04"},null,512),[[h,t.downloadForm.version]])]),o("div",Ro,[e[45]||(e[45]=o("label",{class:"form-label"},"Architecture",-1)),m(o("select",{"onUpdate:modelValue":e[17]||(e[17]=a=>t.downloadForm.architecture=a),class:"form-control"},[...e[44]||(e[44]=[o("option",{value:"amd64"},"amd64 (x86_64)",-1),o("option",{value:"arm64"},"arm64",-1)])],512),[[U,t.downloadForm.architecture]])])]),t.downloading?(r(),d("div",qo,[...e[46]||(e[46]=[o("p",{class:"text-center text-muted"},"Downloading ISO from URL...",-1),o("div",{class:"loading-spinner"},null,-1)])])):w("",!0),o("div",zo,[o("button",{type:"submit",class:"btn btn-primary",disabled:t.downloading},n(t.downloading?"Downloading...":"Download ISO"),9,Eo),o("button",{type:"button",onClick:e[18]||(e[18]=a=>t.showDownloadModal=!1),class:"btn btn-outline",disabled:t.downloading}," Cancel ",8,Go)])],32)])])):w("",!0)])}const jo=G(Y,[["render",Xo],["__scopeId","data-v-295eeb95"]]);export{jo as default};