import{b as F,c as j,d as W,e as z,f as D,g as O,h as A,i as B,o as $,p as q,t as R}from"./chunk-UDFQV3WY.js";import{a as _}from"./chunk-MBEC6LK4.js";import{Ba as w,Eb as l,Fa as s,Fb as b,Gb as P,Hc as U,Jb as v,Kb as h,Lb as y,M as I,R as c,S as g,Ta as V,Ya as f,ca as u,jb as m,kb as i,lb as r,mb as C,pc as T,qb as E,qc as k,rb as x,rc as L,sb as p,xc as N}from"./chunk-TVKQFRWX.js";import{a as S,b as M}from"./chunk-DAQOROHW.js";function H(n,t){if(n&1&&(i(0,"div",10),l(1),r()),n&2){let e=p();s(),b(e.message())}}function J(n,t){n&1&&(i(0,"div",11),l(1,"Chargement\u2026"),r())}function K(n,t){n&1&&(i(0,"div",11),l(1,"Aucun partenaire."),r())}function Q(n,t){if(n&1&&(i(0,"a",26),l(1),r()),n&2){let e=p().$implicit;m("href",e.website,w),s(),b(e.website)}}function X(n,t){n&1&&(i(0,"p",27),l(1,"Adresse du site web \xE0 renseigner"),r())}function Y(n,t){if(n&1){let e=E();i(0,"article",14)(1,"div",15),C(2,"img",16),r(),i(3,"div",17)(4,"div",18)(5,"h2",19),l(6),r(),i(7,"span",20),l(8),r()(),f(9,Q,2,2,"a",21)(10,X,2,0,"p",22),r(),i(11,"div",23)(12,"button",24),x("click",function(){let o=c(e).$implicit,d=p(2);return g(d.edit(o))}),l(13,"Modifier"),r(),i(14,"button",25),x("click",function(){let o=c(e).$implicit,d=p(2);return g(d.remove(o))}),l(15,"Supprimer"),r()()()}if(n&2){let e=t.$implicit,a=p(2);s(2),m("src",a.logoUrl(e.logoUrl),w)("alt",e.name),s(4),b(e.name),s(),m("ngClass",e.active?"bg-green-100 text-green-700":"bg-slate-100 text-slate-500"),s(),b(e.active?"Visible":"Masqu\xE9"),s(),m("ngIf",e.website),s(),m("ngIf",!e.website)}}function Z(n,t){if(n&1&&(i(0,"div",12),f(1,Y,16,7,"article",13),r()),n&2){let e=p();s(),m("ngForOf",e.partners())}}function ee(n,t){if(n&1&&(i(0,"div",50),l(1),r()),n&2){let e=p(2);s(),P(" ",e.formError()," ")}}function te(n,t){n&1&&(i(0,"p",51),l(1,"Vous devez s\xE9lectionner une image avant l\u2019enregistrement."),r())}function re(n,t){if(n&1&&(i(0,"div",52),C(1,"img",53),r()),n&2){let e=p(2);s(),m("src",e.logoPreview(),w)}}function ie(n,t){if(n&1){let e=E();i(0,"div",28)(1,"div",29)(2,"div",30)(3,"h2",31),l(4),r()(),i(5,"form",32),x("ngSubmit",function(){c(e);let o=p();return g(o.save())}),f(6,ee,2,1,"div",33),i(7,"div")(8,"label",34),l(9,"Nom du partenaire *"),r(),i(10,"input",35),y("ngModelChange",function(o){c(e);let d=p();return h(d.form.name,o)||(d.form.name=o),g(o)}),r()(),i(11,"div")(12,"label",36),l(13,"Adresse du site web"),r(),i(14,"input",37),y("ngModelChange",function(o){c(e);let d=p();return h(d.form.website,o)||(d.form.website=o),g(o)}),r()(),i(15,"div")(16,"label",38),l(17,"Ordre d\u2019affichage"),r(),i(18,"input",39),y("ngModelChange",function(o){c(e);let d=p();return h(d.form.displayOrder,o)||(d.form.displayOrder=o),g(o)}),r()(),i(19,"div")(20,"label",40),l(21),r(),i(22,"input",41),x("change",function(o){c(e);let d=p();return g(d.chooseLogo(o))}),r(),f(23,te,2,0,"p",42)(24,re,2,1,"div",43),r(),i(25,"label",44)(26,"input",45),y("ngModelChange",function(o){c(e);let d=p();return h(d.form.active,o)||(d.form.active=o),g(o)}),r(),i(27,"span",46),l(28,"Afficher ce partenaire sur le site"),r()(),i(29,"div",47)(30,"button",48),x("click",function(){c(e);let o=p();return g(o.close())}),l(31,"Annuler"),r(),i(32,"button",49),l(33),r()()()()()}if(n&2){let e=p();s(4),b(e.editing()?"Modifier le partenaire":"Ajouter un partenaire"),s(2),m("ngIf",e.formError()),s(4),v("ngModel",e.form.name),s(4),v("ngModel",e.form.website),s(4),v("ngModel",e.form.displayOrder),s(3),P("Logo ",e.editing()?"(laisser vide pour conserver le logo)":"*"),s(2),m("ngIf",!e.editing()&&!e.selectedLogo),s(),m("ngIf",e.logoPreview()),s(2),v("ngModel",e.form.active),s(6),m("disabled",e.saving()),s(),b(e.saving()?"Enregistrement\u2026":"Enregistrer")}}var G=class n{http=I(U);partners=u([]);loading=u(!0);saving=u(!1);showForm=u(!1);editing=u(null);logoPreview=u(null);message=u("");formError=u("");selectedLogo=null;form={name:"",website:"",displayOrder:0,active:!0,logoUrl:""};constructor(){this.load()}load(){this.loading.set(!0),this.http.get(`${_.apiUrl}/partners`).subscribe({next:t=>{this.partners.set(t),this.loading.set(!1)},error:()=>{this.message.set("Impossible de charger les partenaires."),this.loading.set(!1)}})}create(){this.editing.set(null),this.selectedLogo=null,this.logoPreview.set(null),this.formError.set(""),this.form={name:"",website:"",displayOrder:this.partners().length+1,active:!0,logoUrl:""},this.showForm.set(!0)}edit(t){this.editing.set(t),this.selectedLogo=null,this.logoPreview.set(this.logoUrl(t.logoUrl)),this.formError.set(""),this.form={name:t.name,website:t.website||"",displayOrder:t.displayOrder,active:t.active,logoUrl:t.logoUrl},this.showForm.set(!0)}chooseLogo(t){let e=t.target.files?.[0]??null;if(this.selectedLogo=e,!e)return;this.formError.set("");let a=new FileReader;a.onload=()=>this.logoPreview.set(String(a.result)),a.readAsDataURL(e)}close(){this.showForm.set(!1),this.formError.set("")}save(){if(this.formError.set(""),!this.form.name.trim()){this.formError.set("Veuillez saisir le nom du partenaire.");return}if(!this.editing()&&!this.selectedLogo){this.formError.set("Veuillez choisir le fichier du logo avant d\u2019enregistrer.");return}let t=this.normalizedWebsite(this.form.website);if(this.form.website.trim()&&!t){this.formError.set("L\u2019adresse du site web n\u2019est pas valide. Exemple : https://www.exemple.bf");return}this.saving.set(!0);let e=new FormData;e.append("partner",new Blob([JSON.stringify(M(S({},this.form),{website:t}))],{type:"application/json"})),this.selectedLogo&&e.append("logo",this.selectedLogo);let a=this.editing();(a?this.http.put(`${_.apiUrl}/partners/${a.id}`,e):this.http.post(`${_.apiUrl}/partners`,e)).subscribe({next:()=>{this.message.set(a?"Partenaire modifi\xE9 avec succ\xE8s.":"Partenaire ajout\xE9 avec succ\xE8s."),this.saving.set(!1),this.close(),this.load()},error:d=>{this.formError.set(d.status===404?"Le module Partenaires n\u2019est pas encore disponible sur le backend. Red\xE9marrez Spring Boot puis r\xE9essayez.":"La sauvegarde a \xE9chou\xE9. V\xE9rifiez le logo et que le backend Spring Boot est bien d\xE9marr\xE9."),this.saving.set(!1)}})}remove(t){confirm(`Supprimer le partenaire \xAB ${t.name} \xBB ?`)&&this.http.delete(`${_.apiUrl}/partners/${t.id}`).subscribe({next:()=>{this.message.set("Partenaire supprim\xE9."),this.load()},error:()=>this.message.set("La suppression a \xE9chou\xE9.")})}logoUrl(t){return/^(https?:\/\/|assets\/|data:)/i.test(t)?t:`${_.FileUrl}${t.startsWith("/")?"":"/"}${t}`}normalizedWebsite(t){let e=t.trim();if(!e)return"";let a=/^https?:\/\//i.test(e)?e:`https://${e}`;try{let o=new URL(a);return["http:","https:"].includes(o.protocol)?o.toString():""}catch{return""}}static \u0275fac=function(e){return new(e||n)};static \u0275cmp=V({type:n,selectors:[["app-partners"]],decls:15,vars:5,consts:[[1,"space-y-6"],[1,"flex","flex-col","gap-4","sm:flex-row","sm:items-center","sm:justify-between"],[1,"text-2xl","font-bold","text-slate-900"],[1,"mt-1","text-slate-500"],["type","button",1,"btn-primary",3,"click"],["class","rounded-xl border border-primary-200 bg-primary-50 px-4 py-3 text-sm text-primary-800",4,"ngIf"],[1,"overflow-hidden","rounded-2xl","border","border-slate-200","bg-white","shadow-sm"],["class","p-10 text-center text-slate-500",4,"ngIf"],["class","divide-y divide-slate-100",4,"ngIf"],["class","fixed inset-0 z-50 flex items-center justify-center bg-slate-950/50 p-4",4,"ngIf"],[1,"rounded-xl","border","border-primary-200","bg-primary-50","px-4","py-3","text-sm","text-primary-800"],[1,"p-10","text-center","text-slate-500"],[1,"divide-y","divide-slate-100"],["class","flex flex-col gap-4 p-5 sm:flex-row sm:items-center",4,"ngFor","ngForOf"],[1,"flex","flex-col","gap-4","p-5","sm:flex-row","sm:items-center"],[1,"flex","h-20","w-28","shrink-0","items-center","justify-center","rounded-xl","border","border-slate-100","bg-white","p-3"],[1,"max-h-full","max-w-full","object-contain",3,"src","alt"],[1,"min-w-0","flex-1"],[1,"flex","items-center","gap-3"],[1,"font-bold","text-slate-900"],[1,"rounded-full","px-2.5","py-1","text-xs","font-semibold",3,"ngClass"],["target","_blank","rel","noopener noreferrer","class","mt-1 block truncate text-sm text-primary-700 hover:underline",3,"href",4,"ngIf"],["class","mt-1 text-sm text-amber-600",4,"ngIf"],[1,"flex","shrink-0","gap-2"],["type","button",1,"rounded-lg","border","border-primary-300","px-4","py-2","text-sm","font-semibold","text-primary-700","hover:bg-primary-50",3,"click"],["type","button",1,"rounded-lg","border","border-red-300","px-4","py-2","text-sm","font-semibold","text-red-600","hover:bg-red-50",3,"click"],["target","_blank","rel","noopener noreferrer",1,"mt-1","block","truncate","text-sm","text-primary-700","hover:underline",3,"href"],[1,"mt-1","text-sm","text-amber-600"],[1,"fixed","inset-0","z-50","flex","items-center","justify-center","bg-slate-950/50","p-4"],[1,"max-h-[92vh]","w-full","max-w-2xl","overflow-y-auto","rounded-2xl","bg-white","shadow-2xl"],[1,"border-b","border-slate-200","p-6"],[1,"text-xl","font-bold"],["novalidate","",1,"space-y-5","p-6",3,"ngSubmit"],["class","rounded-xl border border-red-200 bg-red-50 px-4 py-3 text-sm font-medium text-red-700","role","alert",4,"ngIf"],["for","partner-name",1,"label"],["id","partner-name","name","name","required","",1,"input",3,"ngModelChange","ngModel"],["for","partner-website",1,"label"],["id","partner-website","name","website","placeholder","https://www.exemple.bf",1,"input",3,"ngModelChange","ngModel"],["for","partner-order",1,"label"],["id","partner-order","type","number","name","displayOrder","min","0",1,"input",3,"ngModelChange","ngModel"],["for","partner-logo",1,"label"],["id","partner-logo","type","file","accept","image/png,image/jpeg,image/webp,image/svg+xml",1,"input",3,"change"],["class","mt-1 text-sm text-amber-700",4,"ngIf"],["class","mt-3 flex h-32 items-center justify-center rounded-xl border border-dashed border-slate-300 p-4",4,"ngIf"],[1,"flex","items-center","gap-3","rounded-xl","bg-slate-50","p-4"],["type","checkbox","name","active",1,"h-5","w-5","rounded","border-slate-300","text-primary-700",3,"ngModelChange","ngModel"],[1,"font-medium","text-slate-700"],[1,"flex","justify-end","gap-3","border-t","border-slate-200","pt-5"],["type","button",1,"rounded-lg","border","border-slate-300","px-5","py-2.5","font-semibold","text-slate-700",3,"click"],["type","submit",1,"btn-primary",3,"disabled"],["role","alert",1,"rounded-xl","border","border-red-200","bg-red-50","px-4","py-3","text-sm","font-medium","text-red-700"],[1,"mt-1","text-sm","text-amber-700"],[1,"mt-3","flex","h-32","items-center","justify-center","rounded-xl","border","border-dashed","border-slate-300","p-4"],["alt","Aper\xE7u du logo",1,"max-h-full","max-w-full","object-contain",3,"src"]],template:function(e,a){e&1&&(i(0,"div",0)(1,"div",1)(2,"div")(3,"h1",2),l(4,"Partenaires"),r(),i(5,"p",3),l(6,"G\xE9rez les logos et les liens affich\xE9s sur la page d\u2019accueil."),r()(),i(7,"button",4),x("click",function(){return a.create()}),l(8,"+ Ajouter un partenaire"),r()(),f(9,H,2,1,"div",5),i(10,"div",6),f(11,J,2,0,"div",7)(12,K,2,0,"div",7)(13,Z,2,1,"div",8),r()(),f(14,ie,34,11,"div",9)),e&2&&(s(9),m("ngIf",a.message()),s(2),m("ngIf",a.loading()),s(),m("ngIf",!a.loading()&&a.partners().length===0),s(),m("ngIf",!a.loading()&&a.partners().length),s(),m("ngIf",a.showForm()))},dependencies:[N,T,k,L,R,A,j,B,F,W,z,q,$,O,D],encapsulation:2})};export{G as PartnersComponent};