{"version":3,"file":"kng2-core.mjs","sources":["../../../src/config.ts","../../../src/util.ts","../../../src/metrics.service.ts","../../../src/user.service.ts","../../../src/is-authenticated.service.ts","../../../src/assistant.service.ts","../../../src/config.service.ts","../../../src/es5.ts","../../../src/calendar.service.ts","../../../src/product.service.ts","../../../src/cart.service.ts","../../../src/category.service.ts","../../../src/document.service.ts","../../../src/shop.service.ts","../../../src/order/order.enum.ts","../../../src/order/order.ts","../../../src/order/order.service.ts","../../../src/loader.service.ts","../../../src/photo.service.ts","../../../src/util.bg-src.directive.ts","../../../src/util.confirm-delete.directive.ts","../../../src/order/order.pipe.portion.ts","../../../src/util.markdown.directive.ts","../../../src/reporting.service.ts","../../../src/hub.service.ts","../../../src/util.one-click.directive.ts","../../../src/kng2-core.module.ts","../../../src/index.ts","../../../src/kng2-core.ts"],"sourcesContent":["import { Hub } from \"./hub.service\";\n\nexport const configCors = () => {\n  return (window.location.host.indexOf('localhost') == 0);\n}\n\n\nexport class Config {\n  constructor(cfg?) {\n    this.shared = {};\n    if(cfg) {\n      Object.assign(this,cfg);\n    }\n    this.isAvailable = false;\n  }\n  isAvailable: boolean;\n  shared: any;\n\n  API_SERVER: string;\n  API_VERSION: string;\n\n\n  LOG_LEVEL: string;\n\n  AUTH_SUCCESS_REDIRECT_URL: string;\n  AUTH_ERROR_REDIRECT_URL: string;\n\n  user: any;\n  loader: string[];\n\n  loginPath: string[];\n  readonlyPath: string[];\n  avoidShopUIIn: string[];\n\n  preloadOrders;\n\n  /**\n   * @deprecated Utiliser CalendarService.potentialShippingDay() à la place.\n   * Cette méthode a un bug de timezone (getHours/setHours au lieu de getUTCHours/setUTCHours).\n   * La logique correcte et testée se trouve dans CalendarService.\n   */\n  potentialShippingDay(hub:Hub): Date {\n    console.warn('Config.potentialShippingDay() est déprécié. Utiliser CalendarService.potentialShippingDay()');\n    const currentHub = hub || this.shared.hub;\n    const now = new Date();\n    const potential = new Date(now.getTime() + 3600000 * currentHub.timelimit);\n\n    // ⚠️ BUG TIMEZONE : utilise getHours() au lieu de getUTCHours()\n    // FIXME: Migrer vers CalendarService qui utilise UTC correctement\n    if (potential.getHours() >= currentHub.timelimitH) {\n      potential.setHours(currentHub.timelimitH, 0, 0, 0);\n      return potential.plusDays(1);\n    }\n\n    potential.setHours(currentHub.timelimitH, 0, 0, 0);\n    return potential;\n  }\n\n  /**\n   * @deprecated Utiliser CalendarService.timeleftBeforeCollect() à la place.\n   * Cette méthode a un bug de timezone (setHours au lieu de setUTCHours).\n   * La logique correcte, testée et documentée se trouve dans CalendarService.\n   */\n  timeleftBeforeCollect(hub, customTimelimit?:number,when?:Date):number{\n    console.warn('Config.timeleftBeforeCollect() est déprécié. Utiliser CalendarService.timeleftBeforeCollect()');\n    hub = hub || this.shared.hub;\n\n    const preparationHours = (typeof customTimelimit === 'number' && customTimelimit > 0) ? customTimelimit : hub.timelimit;\n    const collectHour = hub.timelimitH;\n    const tempHubForCalc = { ...hub, timelimit: preparationHours };\n    const chosenShippingDate = when || this.potentialShippingDay(tempHubForCalc);\n\n    if (!chosenShippingDate) {\n      return -1;\n    }\n\n    // ⚠️ BUG TIMEZONE : utilise setHours() au lieu de setUTCHours()\n    // FIXME: Migrer vers CalendarService qui utilise UTC correctement\n    const collectDateTime = new Date(chosenShippingDate);\n    collectDateTime.setHours(collectHour, 0, 0, 0);\n\n    const deadlineMilliseconds = collectDateTime.getTime() - (preparationHours * 3600000);\n    const cutoffDateTime = new Date(deadlineMilliseconds);\n    const now = Date.now();\n    const timeLeftInHours = (cutoffDateTime.getTime() - now) / 3600000;\n\n    return timeLeftInHours;\n  }\n\n  /**\n   * @deprecated Utiliser CalendarService.potentialShippingWeek() à la place.\n   * Cette méthode dépend de potentialShippingDay() qui a un bug de timezone.\n   * La logique correcte se trouve dans CalendarService.\n   */\n  potentialShippingWeek(hub: Hub) {\n    console.warn('Config.potentialShippingWeek() est déprécié. Utiliser CalendarService.potentialShippingWeek()');\n    const currentHub = hub || this.shared.hub;\n    const potential = this.potentialShippingDay(currentHub);\n    return potential.dayToDates(\n      currentHub.weekdays\n    );\n  }\n\n  /**\n   * @deprecated Utiliser CalendarService.noShippingMessage() à la place.\n   * Cette méthode dépend de potentialShippingWeek() qui a un bug de timezone.\n   * La logique correcte se trouve dans CalendarService.\n   */\n  noShippingMessage(hub: Hub) {\n    console.warn('Config.noShippingMessage() est déprécié. Utiliser CalendarService.noShippingMessage()');\n    const $hub = hub || this.shared.hub;\n    return this.potentialShippingWeek($hub).map(shipping => {\n      const find = $hub.noshipping.find(noshipping => {\n        return shipping.in(noshipping.from, noshipping.to);\n      });\n      if (find) {\n        shipping.message = find.reason;\n      }\n      return shipping;\n    });\n  }\n\n\n  getDefaultTimeByDay(day:Date): number {\n    // get default value before shared config is loaded (FIXME remove => (day.getDay()==6)?12:16)\n    if(!this.shared.shipping ||!this.shared.shipping.defaultTimeByDay) {\n      return (day.getDay()==6)?12:16;\n    }\n    return this.shared.shipping.defaultTimeByDay[day.getDay()];\n  }\n\n  getShippingDistrict(postalCode) {\n    const districts = Object.keys(this.shared.shipping.district);\n    const district = districts.find( district => {\n      return this.shared.shipping.district[district] &&\n             this.shared.shipping.district[district].indexOf(postalCode) !== -1;\n    });\n    // FIXME hypercenter should not be default\n    return district || 'hypercenter';\n  }\n\n}\n\n\nexport interface ConfigMenu {\n  name: {\n    en: string;\n    fr: string;\n    de: string;\n  };\n  url: string;\n  weight: number;\n  group: string;\n  active: boolean;\n}\n\n/**\n * shared:{\n *  keys:{\n *    pubUpcare:string\n *    pubMap:string\n *  }\n * }\n */\n\nexport enum ConfigKeyStoreEnum {\n  KIO2_LOGIN_REMEMBER   = 0,\n  KIO2_SERVER           = 1\n}\nexport let config: Config = new Config();\n","import { Observable, ReplaySubject } from 'rxjs';\nimport { map } from 'rxjs/operators';\n\n\nfunction hasDifferentArgs(prev: unknown[], next: unknown[]) {\n  if (prev.length !== next.length) return true;\n  for (let i = 0; i < prev.length; i++) {\n    if (!Object.is(prev[i], next[i])) return true;\n  }\n  return false;\n}\n\n//\n// cache fonction to avoid useless compute\nexport function memo<T extends Function>(fnToMemoize: T): T {\n  let prevArgs = [{}];\n  let result;\n\n  return function (...newArgs) {\n    if (hasDifferentArgs(prevArgs, newArgs)) {\n      result = fnToMemoize(...newArgs);\n      prevArgs = newArgs;\n    }\n    return result;\n  } as any;\n}\n\nconst typecache = {};\nexport function audioMimeType(url) {\n  const xhr = new XMLHttpRequest();\n  return new Promise((resolve => {\n    if( typecache[url]) {\n      return resolve(typecache[url]);\n    }\n    xhr.open('HEAD', url);\n    xhr.onreadystatechange = function() {\n      if (xhr.readyState === XMLHttpRequest.DONE) {\n        if (xhr.status === 200) {\n          const type = xhr.getResponseHeader('Content-Type');\n          typecache[url]= type;\n          resolve(type);\n        } else {\n          resolve(\"\");\n        }\n      }\n    };  \n    xhr.send();\n  }));\n}\n\n//\n// simple geolocation function to get lat/long from address\n// add context.$http and context.config \nexport function geolocation(address, context) {\n  const postal = address.postalCode || '';\n  const region = address.region || 'Suisse';\n  const street = address.streetAdress;\n  const fulladdress = [street, postal, region].join(',');\n  const url = context.config.API_SERVER + '/v1/geocode?address=' + fulladdress + '&sensor=false';\n  return context.$http.get(url, { withCredentials: false }).pipe(\n    map((geo: any) => {\n      //\n      // return error message\n      if (geo.error_message){\n        throw(geo.error_message);\n      }\n      const result: any = { address: address};\n      if (!geo || !geo.results.length || !geo.results[0].geometry) {\n        return result;\n      }\n      result.geo = geo.results[0].geometry;\n      result.components = (geo.results[0].address_components || []).map(comp => comp.long_name);\n      return result;\n    })\n  ); \n}\n\n//\n// simple geolocation function to get lat/long from address\n// add context.$http and context.config \nexport function geoadmin(address, context) {\n  const url = context.config.API_SERVER + '/v1/geoadmin?address=' + address;\n  return context.$http.get(url, { withCredentials: false })\n}\n\n// FIXME test utility class and replace class by exported functions\nexport class Utils {\n\n  private static scripts: { [url: string]: ReplaySubject<any> } = {};\n  static roundAmount(value) {\n    //return parseFloat((Math.round(value * 20) / 20).toFixed(2));\n    return parseFloat((Math.round(value * 100) / 100).toFixed(2));\n  }\n\n  static mod9710(iban) {\n    let remainder = iban;\n    let block;\n    while (remainder.length > 2) {\n        block = remainder.slice(0, 9);\n        remainder = parseInt(block, 10) % 97 + remainder.slice(block.length);\n    }\n    return parseInt(remainder, 10) % 97;\n  }\n  static mod10(code) {\n    code = code.replace(/ /g, \"\");\n    const table = [0, 9, 4, 6, 8, 2, 7, 1, 3, 5];\n    let carry = 0;\n    for (let i = 0; i < code.length; i++) {\n        carry = table[(carry + parseInt(code.substr(i, 1), 10)) % 10];\n    }\n    return ((10 - carry) % 10).toString();\n  }\n  static deviceID() {\n    const navigatorInfo = window.navigator;\n    const screenInfo = window.screen;\n    let uid = navigatorInfo.mimeTypes.length  + '';\n    uid += navigatorInfo.language.split('').map((c, i)=> c.charCodeAt(0)).reduce((p,c)=>p*c);\n    uid += (navigatorInfo.productSub || '');\n    uid += navigatorInfo.userAgent.replace(/\\D+/g, '') + '';\n    uid += navigatorInfo.plugins.length;\n    uid += screenInfo.height || '';\n    uid += screenInfo.width || '';\n    uid += screenInfo.pixelDepth || '';\n    return uid;\n  }\n\n  static encodeQuery(params) {\n    const elems = [];\n    for (const d in params) {\n      elems.push(encodeURIComponent(d) + '=' + encodeURIComponent(params[d]));\n    }\n    return elems.join('&');\n  }\n\n  static isObject(item) {\n    return (item && typeof item === 'object' && !Array.isArray(item) && item !== null);\n  }\n\n  static merge(target, ...sources) {\n    if (!sources.length) { return target; }\n    const source = sources.shift();\n\n    if (Utils.isObject(target) && Utils.isObject(source)) {\n      for (let key in source) {\n        if (Utils.isObject(source[key])) {\n          if (!target[key]) { Object.assign(target, { [key]: {} }); }\n          Utils.merge(target[key], source[key]);\n        } else {\n          Object.assign(target, { [key]: source[key] });\n        }\n      }\n    }\n\n    return Utils.merge(target, ...sources);\n  }\n\n\n  //\n  // https://github.com/ded/script.js/blob/master/dist/script.js\n  // https://netbasal.com/loading-external-libraries-on-demand-in-angular-9dad45701801\n  static script(url: string, key: string): Observable<string> {\n    if (Utils.scripts[url]) {\n      return Utils.scripts[url].asObservable();\n    }\n\n    Utils.scripts[url] = new ReplaySubject();\n\n    const script = document.createElement('script');\n    script.type = 'text/javascript';\n    script.src = url;\n    script.onload = () => {\n      const inst = (key && window[key]) || window;\n      Utils.scripts[url].next(inst);\n      Utils.scripts[url].complete();\n    };\n\n    document.body.appendChild(script);\n\n    return Utils.scripts[url].asObservable();\n  }\n}\n\n//\n// simple hash function with SDBM algo (also used by the backend)\nexport function hachacha(str) {\n  const hash = Array.from(str).reduce((hash:bigint, char:string) => {\n    return (hash << BigInt(6)) + BigInt(char.charCodeAt(0)) + (hash << BigInt(16)) - hash ;\n  }, BigInt(0)) as bigint;\n  // return 8 bytes!\n  return (hash & BigInt(\"0xffffffffffffffff\")).toString(16);  \n}\n\n\n\n\n//\n// useful simple crypto\nexport class XorCipher {\n  constructor() {\n  }\n\n  encode(key, data:string) {\n    const bytes = this.xor_encrypt(key, data);\n    return btoa(bytes.join());\n  }\n\n  decode(key, data:string) {\n    data = atob(data);\n    return this.xor_decrypt(key, data);\n  }\n\n  private keyCharAt(key, i) {\n    return key.charCodeAt( Math.floor(i % key.length) );\n  }\n\n  private xor_encrypt(key, data:string) {\n    key = hachacha(key); // add more entropy \n    return data.split('').map((c, i)=> {\n      return c.charCodeAt(0) ^ this.keyCharAt(key, i);\n    });\n  }\n\n  private xor_decrypt(key, data:string) {\n    key = hachacha(key); // add more entropy \n    return data.split('').map((c:any, i)=>{\n      return String.fromCharCode( c ^ this.keyCharAt(key, i) );\n    }).join(\"\");\n  }\n}\n\n//\n// streamed geolocation\n// Create an Observable that will start listening to browser geolocation updates\n// when a consumer subscribes.\nexport const GeolocationPositionStream = new Observable((observer) => {\n  let watchId: number;\n\n  // The geolocation API (if it exists) provides values to publish\n  if ('geolocation' in navigator) {\n    watchId = navigator.geolocation.watchPosition(\n      (position: GeolocationPosition) => observer.next(position),\n      (error: GeolocationPositionError) => observer.error(error)\n    );\n  } else {\n    observer.error('Geolocation not available');\n  }\n\n  // When the consumer unsubscribes, stop listening to geolocation changes.\n  return {\n    unsubscribe() {\n      navigator.geolocation.clearWatch(watchId);\n    }\n  };\n});","import { HttpClient, HttpHeaders } from '@angular/common/http';\nimport { Injectable, Inject } from '@angular/core';\n\nimport { Config, configCors, config } from './config';\nimport { ConfigService } from './config.service';\n\n\nimport { Subject } from 'rxjs';\nimport { debounceTime, switchMap } from 'rxjs/operators';\n\nexport interface Metrics {\n  when?: string;\n  ip?: string;\n  hit?: number;\n  updated?: Date;\n  amount?: number;\n  hub: string;\n  action: string;\n  source: string;\n  extra?:any;\n}\n\n@Injectable()\nexport class AnalyticsService {\n\n  //\n  // use MARKER default or previous available on localStorage\n  static FBP = \"fb.1.\"+Date.now()+\".\"+(Math.random()*1000000000|0);\n  private headers: HttpHeaders;\n  public config: Config | any;\n  public metrics$: Subject<Metrics>;\n\n  constructor(\n    private http: HttpClient\n  ) {\n    this.headers = new HttpHeaders({\n      'Content-Type': 'application/json',\n      'Cache-Control' : 'no-cache',\n      'Pragma' : 'no-cache',\n      'ngsw-bypass':'true',\n      'k-dbg': AnalyticsService.FBP\n    });\n\n\n    //\n    // build a custom pixel marker for Meta (FB)\n    try {\n      AnalyticsService.FBP = localStorage.getItem('meta-fbp') || AnalyticsService.FBP;\n      localStorage.setItem('meta-fbp',(AnalyticsService.FBP));\n    } catch (err) {\n    }\n\n\n\n    this.config = config;\n    this.metrics$ = new Subject<Metrics>();\n    this.metrics$.pipe(\n      debounceTime(500),\n      switchMap(metrics => {\n      return this.http.post<Metrics>(this.config.API_SERVER + '/v1/matrix', metrics, {\n        headers: this.headers,\n        withCredentials: (configCors())\n      })\n    })).subscribe();\n  }\n\n  push(metrics: Metrics) {    \n    this.metrics$.next(metrics);\n  }\n\n  feedback(evaluation, content) {    \n    return this.http.post<any>(this.config.API_SERVER + '/v1/metrics/feedback',{evaluation,content}, {\n      headers: this.headers,\n      withCredentials: (configCors())\n    })\n\n  }\n\n  get(params?) {\n    return this.http.get<any>(this.config.API_SERVER + '/v1/metrics', {\n      params:params||{},\n      headers: this.headers,\n      withCredentials: (configCors())\n    })\n  }\n}\n","import { HttpClient, HttpHeaders } from '@angular/common/http';\nimport { Injectable, Inject } from '@angular/core';\nimport { ReplaySubject ,  Observable ,  SubscriptionLike as ISubscription ,  of ,  from ,  throwError as _throw } from 'rxjs';\nimport { catchError, map, tap } from 'rxjs/operators';\n\n\n\n// Cannot call a namespace ('moment')\n// import * as moment from 'moment';\n// https://stackoverflow.com/questions/39519823/using-rollup-for-angular-2s-aot-compiler-and-importing-moment-js\n// import  moment from 'moment';\n// import 'moment/locale/fr';\n\n//\nimport { config } from './config';\nimport { Shop } from './shop.service';\nimport { XorCipher } from './util';\nimport { AnalyticsService } from './metrics.service';\n\n//\n// FIXME: Refactor UserAddress, DepositAddress, and other AlienAddress for better usability\nexport class UserAddress {\n\n  constructor(\n    content\n  ) {\n    // for security\n    content = content ||{};\n    this.type = 'customer';\n    this.name = content.name||'';\n    this.streetAdress = content.street||content.streetAdress||content.streetAddress||'';\n    this.streetAddress = this.streetAdress;\n    this.phone = content.phone||'';\n    this.floor = content.floor||'';\n    this.region = content.region||'';\n    this.postalCode = content.postalCode||'';\n    this.note = content.note||'';\n    this.primary = content.primary;\n    this.geo = content.geo || {lat: 0, lng: 0};\n  }\n  id?: string;\n  name: string;\n  note: string;\n  phone?:string;\n  floor: string;\n  streetAdress: string;\n  streetAddress?: string;\n  region: string;\n  postalCode: string;\n  primary?: boolean;\n  type: string|\"deposit\"|\"customer\"|\"order\" = 'customer';\n  geo: {\n    lat: number;\n    lng: number;\n    zoom?: number;\n  };\n\n  //\n  // the heavy international api\n  // https://github.com/catamphetamine/libphonenumber-js\n  static normalizePhone(phone: string): string {\n    if (!phone) return '';\n\n    // Remove all non-digits except leading '+'\n    // Regex explanation: (?!^\\+) = negative lookahead to preserve leading +\n    let normalizedNumber = phone.replace(/(?!^\\+)\\D/g, '');\n\n    // Convert 00 international prefix to +\n    if (normalizedNumber.startsWith('00')) {\n      normalizedNumber = '+' + normalizedNumber.slice(2);\n    }\n\n    // Swiss mobile numbers: add +41 if starts with 07/08/09\n    if (/^0[789]/.test(normalizedNumber)) {\n      normalizedNumber = '+41' + normalizedNumber.slice(1);\n    }\n\n    return normalizedNumber;\n  }\n\n  static isEqual(source:UserAddress|DepositAddress|ShippingAddress, address: UserAddress|DepositAddress|ShippingAddress): boolean {\n    if(!source||!address) {\n      return false;\n    }\n    if(source.id && address.id) {\n      return (source.id == address.id);\n    }\n    return source.streetAdress == address.streetAdress &&\n           source.name == address.name &&\n           source.floor == address.floor &&\n           source.postalCode == address.postalCode;\n  }\n\n  static from(content: any) :UserAddress|DepositAddress|ShippingAddress {\n    content = content || {};\n    if(content.when){\n      return new ShippingAddress(content);\n    }else if(content.weight>=0 && content.fees>=-1) {\n      return new DepositAddress(content);\n    }else {\n      return new UserAddress(content);\n    }\n  }\n}\n\n//\n// used for shipping address with Order instance\nexport class ShippingAddress extends UserAddress {\n  constructor(content, when?, hours?){\n    content = content ||{};\n    super(content)\n    this.type = 'order';\n    // copy as alias\n    this.streetAddress = this.streetAdress;\n    this.shipped = content.shipped == true;\n    this.deposit = content.deposit == true;\n    this.when = new Date(when||content.when);\n    this.hours = (typeof hours === 'number') ? hours : content.hours;\n    this.lastMinute = content.lastMinute == true;\n\n  }\n  when: Date;\n  hours: number;\n  lastMinute: boolean;\n  type:'order'|string;\n  parent?: number;\n  shopper?: string;\n  shopper_time?: string;\n  priority?: number;\n  position?: number;\n  shipped?: boolean; // ✅ Parsé dans constructeur ligne 115\n  deposit?: boolean; // ✅ Parsé dans constructeur ligne 116\n  bags?: number;\n  estimated?: number;\n}\n\nexport class DepositAddress extends UserAddress {\n  weight: number;\n  active: boolean;\n  fees: number;\n  deposit: boolean;\n  constructor(content) {\n    content = content ||{};\n    super(content);\n    this.type = 'deposit';\n    this.weight = content.weight || 0;\n    this.fees = content.fees || 0;\n    this.active = (content.active == true);\n    this.deposit = true;\n  }\n}\n\n\nexport class UserCard {\n\n  constructor(json?: any) {\n    Object.assign(this, json || {});\n    if (!this.expiry) {\n      this.error = 'Unvalid instance';\n      this.expiry = new Date(1970, 0, 0).toISOString();\n      this.number = this.number||this.last4;\n    }\n    this.updated = new Date(this.updated);\n    this.default = (this.default == true);\n  }\n\n  id?: string;\n  intent_id?: string;\n  alias: string;\n  expiry: string;\n  issuer: string;\n  name: string;\n  number: string;\n  last4?: string;\n  provider: string;\n  updated: Date;\n  error: string;\n  default?: boolean; // karibou-wallet compatibility\n\n  //\n  // display expiry\n  expiryToDate() {\n    const date = new Date(this.expiry);\n    const splitted = this.expiry.split('/');\n    let month, year;\n    if (!isNaN(date.getTime())) {\n      return date;\n    }\n\n    if (splitted.length > 0) {\n      month = parseInt(splitted[0], 10);\n      year = parseInt(splitted[1], 10);\n      if (year < 1000) {\n        year += 2000;\n      }\n      return new Date(year, month-1);\n    }\n  }\n  //\n  // check if card is valid\n  isValid() {\n    if (this.error) {\n      return false;\n    }\n\n    const now = new Date();\n    const date = this.expiryToDate();\n    now.setDate(1);\n    now.setHours(0, 0, 0, 1);\n    // ✅ FIXED: Use >= instead of > to allow cards valid until end of current month\n    // Bug: if today is Nov 1st and card expires Nov 2024, comparison was \"Nov 1 > Nov 1\" = false\n    return date >= now;\n  }\n\n  static isEqual(source: UserCard, payment: UserCard) {\n    if(!source||!payment) {\n      return false;\n    }\n    return source.alias == payment.alias;\n  }\n}\n\nexport class User {\n\n  selected: boolean;\n  deleted: boolean;\n  id: number;\n\n  /* The provider which with the user authenticated (facebook, twitter, etc.) */\n  provider: string;\n\n  // tslint:disable-next-line: variable-name\n  identity:{\n    connect_id?: string;\n    connect_state?: boolean;\n    authlink?: string;\n  };\n\n  email: {\n    address: string;\n    cc: string;\n    status: any;\n  };\n\n  /* The name of this user, suitable for display.*/\n  displayName: string;\n  name: {\n    familyName: string;\n    givenName: string;\n  };\n\n  tags: string[];\n  url: string;\n\n  //\n  // phone (DEPRECATED phoneNumbers)\n  phoneNumbers: [{\n    number: string;\n    what: string;\n  }];\n\n  phone: string;\n\n\n  addresses: UserAddress[];\n\n  /* preferred postalCode*/\n  logistic: {\n    postalCode: string[];\n  };\n\n\n  /* preferred products*/\n  likes: number[];\n\n  /* The available Shop for this user */\n  shops: Shop[];\n\n  /* disqus sso , payment intent, etc */\n  context: any;\n\n  /* payments methods */\n  payments: UserCard[];\n  balance: number;\n\n  /* default payment method ID (karibou-wallet integration) */\n  private _default_payment_method?: string;\n\n  plan:{\n    name:string;\n    end:Date;\n    defaultShipping:number;\n    maxInvoices:number\n  };\n\n  reminder: {\n    defaultHub?: string;\n    active: boolean;\n    weekdays: number[];\n    time: Date;\n  };\n\n  orders: {\n    avg: number;\n    funnel: string;\n    profile: string;\n    last1Month: number;\n    last3Month: number;\n    last6Month: number;\n    after6Month: number;\n    errors: number;\n    count: number;\n    latest: Date;\n    lastMail: Date;\n    refunds: number;\n    updated: Date;\n    rating: number;\n    latestErrors: number;\n    hubs: any;\n  };\n\n  hubs?: string[];\n\n  status: boolean;\n  created: Date;\n  updated: Date;\n  logged: Date;\n  roles: string[];\n  rank: string;\n\n  constructor(json?: any,email?:string) {\n    const defaultUser = {\n      id: null,\n      name: {},\n      tags: [],\n      email: {\n      },\n      reminder: {\n        weekdays: []\n      },\n      likes: [],\n      roles: [],\n      shops: [],\n      phoneNumbers: [{\n        number: '',\n        what: 'mobile'\n      }],\n      addresses: [],\n      payments: [],\n      balance:0,\n      logistic: {postalCode: []},\n      plan:{\n        name:'customer'\n      },\n      orders: {\n        hubs:{},\n        profile:'',\n        count: 0,\n        rating: -1,\n        avg: 0,\n        latest: 0,\n        latestErrors: 0,\n        last1Month: 0,\n        last3Month: 0,\n        last6Month: 0,\n      }\n    };\n    Object.assign(this, defaultUser, json || {});\n    if(email && email.indexOf('@')>-1) {\n      this.email.address = email;\n    }\n\n    //\n    // phone (DEPRECATED phoneNumbers)\n    if(!this.phone && this.phoneNumbers && this.phoneNumbers.length) {\n      this.phone = this.phoneNumbers[0].number;\n    }\n\n    if(json && json.balance) {\n      this.balance = parseFloat(json.balance||'0');\n    }\n\n\n    //\n    // FIXME bad latest date format for some users\n    this.orders.latest = new Date(this.orders.latest);\n    if(isNaN(this.orders.latest.getTime())){\n      this.orders.latest = new Date(0);\n    }\n    this.orders.updated = new Date(this.orders.updated);\n    this.created = new Date(this.created);\n\n    this.payments = this.payments.map(payment => new UserCard(payment));\n    this.addresses = this.addresses.map(add => new UserAddress(add));\n    this.context = this.context || {};\n\n  }\n\n  //\n  // methods\n  display() {\n    if (this.displayName) {\n      return this.displayName;\n    }\n    if (this.name && (this.name.givenName || this.name.familyName)) {\n      return this.name.givenName + ' ' + this.name.familyName;\n    }\n    if (this.id) {\n      return this.id + '@' + this.provider;\n    }\n    return 'Anonymous';\n  }\n\n\n  loggedTime() {\n    return (Date.now() - (new Date(this.logged)).getTime()) / 1000;\n  }\n\n  isOwner(shopname) {\n\n    // if (this.isAdmin())return true;\n    for (const i in this.shops) {\n      if (this.shops[i].name === shopname) {\n        return true;\n      }\n    }\n    return false;\n  }\n\n  isOwnerOrAdmin(shopname) {\n    if (this.isAdmin()) {\n      return true;\n    }\n    return this.isOwner(shopname);\n  }\n\n  isAuthenticated(): boolean {\n    return this.id > 0 || this.id !== null;\n  }\n\n  isAdmin() {\n    return this.hasRole('admin');\n  }\n\n  isPremium(json?) {\n    // if(!this.isAuthenticated()) {\n    //   return false;\n    // }\n\n    // if(this.hasRole('admin')){\n    //   return true;\n    // }\n    const user = json || this;\n\n    if(!user.plan) {\n      return false;\n    }\n\n    if([user.plan.name,user.orders.profile].indexOf('premium')>-1) {\n      return true;\n    }\n    if(user.plan.name == 'shareholder') {\n      return true;\n    }\n\n    return false;\n  }\n\n  isReady() {\n    // && this.email.status === true\n    return (this.email && this.email.address);\n  }\n\n  hasRole(role) {\n    return (this.roles.indexOf(role) != -1);\n  }\n\n  hasLike(product) {\n    if (!this.likes || !this.likes.length) {\n      return false;\n    }\n    return (this.likes.indexOf(product.sku) != -1);\n  }\n\n  hasPrimaryAddress(): boolean|UserAddress {\n    if (this.addresses && this.addresses.length == 1) { return this.addresses[0]; }\n    // this.addresses.some(add=>add.primary)\n    for (const i in this.addresses) {\n      if (this.addresses[i].primary === true) {\n        return this.addresses[i];\n      }\n    }\n    return false;\n  }\n\n\n  getEmailStatus(): boolean|Date {\n    if (!this.email || !this.email.status) {\n      return false;\n    }\n\n    if (this.email.status === true) {\n      return true;\n    }\n\n    return new Date(this.email.status);\n    // return moment(this.email.status).format('ddd DD MMM YYYY');\n\n  }\n\n  getDefaultAddress() {\n    const add = (this.addresses || []).find(add => add.primary);\n    if (add) {\n      return add;\n    }\n\n    //\n    // check with first address\n    if (this.addresses && this.addresses.length) {\n      return this.addresses[0];\n    }\n\n    //\n    // return an empty\n    return new UserAddress({});\n  }\n\n  populateAdresseName() {\n    // autofill the address name when available\n    if (this.addresses && this.addresses.length && !this.addresses[0].name) {\n      this.addresses[0].name = this.name.familyName + ' ' + this.name.givenName;\n\n    }\n  }\n\n  getBVR() {\n    const self = this;\n  }\n\n\n  //\n  // init user\n  init() {\n    const self = this;\n\n    // set context for error\n\n    if (!self.addresses) {\n      return;\n    }\n    // check address\n    self.populateAdresseName();\n\n    // TODO get geo\n    // self.geo=new Map();\n    self.addresses.forEach(function(address, i) {\n      // address is correct\n      if (!address.geo || !address.geo.lat || !address.geo.lng) {\n        return;\n      }\n      //\n      // TODO setup marker\n      // self.geo.addMarker(i,{\n      //   lat:address.geo.lat,\n      //   lng:address.geo.lng,\n      //   message:address.streetAdress+'/'+address.postalCode\n      // });\n    });\n\n  }\n\n}\n\nexport interface CustomerChurn {\n  churn:any[];\n  users:User[];\n}\n\nclass Cache {\n    list: User[];\n    map: Map<number, User>;\n    constructor() {\n        this.list = [];\n        this.map = new Map();\n    }\n}\n\n@Injectable()\nexport class UserService {\n\n  mixer:XorCipher;\n\n  //\n  // initial code for auth by token or magic authlink\n  auth:{\n    token: string;\n    authlink: string;\n    defaultEmail: string;\n  }\n\n\n  constructor(\n    @Inject('KNG2_OPTIONS') private customConfig: any,\n    public http: HttpClient\n  ) {\n\n    //\n    // FIXME: remove this mixer, it's not secure enough\n    this.mixer = new XorCipher();\n    this.auth = {\n      token: '',\n      authlink: '',\n      defaultEmail: ''\n    };\n    //\n    // Use dynamic server settings\n    if (!customConfig.API_SERVER) {\n      // customConfig.API_SERVER = ('//api.' + window.location.hostname);\n      customConfig.API_SERVER = ('https://' + window.location.hostname + '/api');\n    }\n    // FIXME remove this hugly config propagation\n    Object.assign(config, customConfig);\n    this.config = config;\n    this.headers = new HttpHeaders({\n      'Content-Type': 'application/json',\n      'Cache-Control' : 'no-cache',\n      'Pragma' : 'no-cache',\n      'ngsw-bypass':'true',\n      'k-dbg': AnalyticsService.FBP\n    });\n    this.user$ = new ReplaySubject<User>(1);\n    this.currentUser = new User();\n\n    try{\n      const isMail=(val) => {\n        if (!val) return false;\n        const $email = /^[^@]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$/;\n        return $email.test(val) && val;\n      };\n      // get marker as helper for the next login\n      const value = localStorage.getItem('kng-auth');\n      if(isMail(value)) {\n        this.auth.defaultEmail = value;\n        this.currentUser.email.address = value;\n      }\n      //const address = this.mixer.decode(config.shared.key,value);\n      //this.currentUser.email.address = isMail(address)||value;\n    }catch(err) {}\n\n  }\n\n\n\n\n  // TODO make observable content !!\n  config: any;\n  currentUser: User;\n  private cache = new Cache();\n\n\n  private headers: HttpHeaders;\n  public  user$: ReplaySubject<User>;\n\n  private updateCache(user: User) {\n    if (!this.cache.map.get(user.id)) {\n      if(!this.currentUser.id||this.currentUser.id == user.id) {\n        Object.assign(this.currentUser, new User(user));\n      }\n      this.cache.map.set(user.id, this.currentUser);\n      return this.cache.map.get(user.id);\n    }\n    // Object.assign(this.currentUser, new User(user));\n    return Object.assign(this.cache.map.get(user.id), new User(user));\n  }\n\n  private deleteCache(user: User) {\n      const incache = this.cache.map.get(user.id);\n      if (incache) {\n          incache.deleted = true;\n          this.cache.map.delete(user.id);\n      }\n      return incache;\n  }\n\n  //\n  // token & magic link\n  // FIXME: make this a real service with specs (current version is for testing purpose)\n  digestMagicAuth(){\n    try{\n      const token = /token=([^&]*)/gm.exec(window.location.href);\n      if(token && token.length>1){\n        this.auth.token = token[1];\n      }\n      const authlink = /authlink=([^&]*)/gm.exec(window.location.href);\n      if(authlink && authlink.length>1){\n        this.auth.authlink = authlink[1];\n      }\n\n    }catch(e){}\n  }\n\n  getMagicAuthToken(){\n    //\n    // check existance on token\n    if (!this.auth.token && !this.auth.authlink) {\n      return {\n        email: this.auth.defaultEmail,\n        password: '',\n        magic: false\n      };\n    }\n    if(this.auth.authlink){\n      return {\n        email: this.auth.defaultEmail,\n        password: this.auth.authlink,\n        magic: true\n      };\n    }\n\n    // decode token\n    let defaultPassword = '';\n    try{\n      const fields = atob(this.auth.token).split('::');\n      if (fields.length === 2) {\n        this.auth.defaultEmail = fields[0];\n        defaultPassword = fields[1];\n      }\n    }catch(e) {}\n\n    return {\n      email: this.auth.defaultEmail,\n      password: defaultPassword,\n      magic: false\n    };\n  }\n\n\n  //\n  // How to build Angular apps using Observable Data Services\n  // http://blog.angular-university.io/how-to-build-angular2-apps-using-rxjs-observable-data-services-pitfalls-to-avoid/\n\n  // get user data by his id\n  get(id: number, forceload?:boolean): Observable<User> {\n\n    if (!forceload && this.cache.map[id]) {\n      return of(this.cache.map[id]);\n    }\n\n    return this.http.get<User>(this.config.API_SERVER + '/v1/users/' + id, {\n      params: { tls: Date.now() + ''},\n      headers: this.headers,\n      withCredentials: true\n    }).pipe(\n      map((user) => new User(user)),\n      catchError(err => of(new User()))\n    );\n\n  }\n\n  //\n  // ============================= REST api wrapper\n\n  // Stripe connect\n  // app.get('/v1/users/connect?code&state', auth.ensureAuthenticated, users.connect);\n  connect(id, state, code) {\n    if (!this.config.API_SERVER) {\n      throw new Error('Issue with uninitialized server context');\n    }\n    const params: any = {\n      state,\n      code\n    };\n\n    return this.http.get<User>(this.config.API_SERVER + '/v1/users/' + id + '/connect', {\n      params: (params),\n      headers: this.headers,\n      withCredentials: true\n    }).pipe(\n      map(user => this.updateCache(user)),\n      tap(user => this.user$.next(user))\n    );\n  }\n\n  // app.get('/v1/users/me', auth.ensureAuthenticated, users.me);\n  me(): Observable<User> {\n    if (!this.config.API_SERVER) {\n      throw new Error('Issue with uninitialized server context');\n    }\n\n    return this.http.get<User>(this.config.API_SERVER + '/v1/users/me', {\n      params: {tls: Date.now() + ''},\n      headers: this.headers,\n      withCredentials: true\n    }).pipe(\n      map(user => {\n        this.updateCache(user);\n        return this.currentUser;\n      }),\n      catchError(err => of(new User({},this.currentUser.email.address))),\n      tap(user => this.user$.next(user))\n    );\n  }\n\n  createOrUpdateAuthLink(id:number,options:any): Observable<any> {\n    return this.http.post<any>(this.config.API_SERVER + '/v1/users/' + id + '/autolink', options, {\n      headers: this.headers,\n      withCredentials: true\n    });\n  }\n  applyCode(code:string): Observable<User> {\n    return this.http.get<User>(this.config.API_SERVER + '/v1/users/redeem/'+code, {\n      params: {tls: Date.now() + ''},\n      headers: this.headers,\n      withCredentials: true\n    }).pipe(\n      map(user => {\n        this.updateCache(user);\n        return this.currentUser;\n      }),\n      tap(user => this.user$.next(user))\n    );\n  }\n\n\n  query(filter?: any): Observable<User[]> {\n    filter = filter || {};\n\n    return this.http.get<User[]>(this.config.API_SERVER + '/v1/users/', {\n      params: filter,\n      headers: this.headers,\n      withCredentials: true\n    }).pipe(\n      map(users => users.map(user => new User(user)))\n    );\n  }\n\n  crmFunnel(content): Observable<any> {\n    // var self = this, params = {};\n    return this.http.post<any>(this.config.API_SERVER + '/v1/crm/funnel', content, {\n      headers: this.headers,\n      withCredentials: true\n    });\n  }\n\n  crmEmail(content): Observable<any> {\n    // var self = this, params = {};\n    return this.http.post<any>(this.config.API_SERVER + '/v1/crm/emails', content, {\n      headers: this.headers,\n      withCredentials: true\n    });\n  }\n\n\n  customerOblivious(filter?: any): Observable<CustomerChurn> {\n    filter = filter || {};\n\n    return this.http.get<CustomerChurn>(this.config.API_SERVER + '/v1/stats/customers/oblivious', {\n      params: filter,\n      headers: this.headers,\n      withCredentials: true\n    }).pipe(\n      map(churn => {\n        return {\n          churn:churn.churn||[],\n          users:churn.users.map(user => new User(user))\n        }\n      })\n    );\n  }\n\n  customerNew(filter?: any): Observable<CustomerChurn> {\n    filter = filter || {};\n\n    return this.http.get<CustomerChurn>(this.config.API_SERVER + '/v1/stats/customers/new', {\n      params: filter,\n      headers: this.headers,\n      withCredentials: true\n    }).pipe(\n      map(churn => {\n        return {\n          churn:churn.churn||[],\n          users:churn.users.map(user => new User(user))\n        }\n      })\n    );\n  }\n\n  customerOccasional(filter?: any): Observable<CustomerChurn> {\n    filter = filter || {};\n\n    return this.http.get<CustomerChurn>(this.config.API_SERVER + '/v1/stats/customers/early', {\n      params: filter,\n      headers: this.headers,\n      withCredentials: true\n    }).pipe(\n      map(churn => {\n        return {\n          churn:churn.churn||[],\n          users:churn.users.map(user => new User(user))\n        }\n      })\n    );\n  }\n\n  customerRecurrent(filter?: any): Observable<CustomerChurn> {\n    filter = filter || {};\n\n    return this.http.get<CustomerChurn>(this.config.API_SERVER + '/v1/stats/customers/recurrent', {\n      params: filter,\n      headers: this.headers,\n      withCredentials: true\n    }).pipe(\n      map(churn => {\n        return {\n          churn:churn.churn||[],\n          users:churn.users.map(user => new User(user))\n        }\n      })\n    );\n  }\n\n  customerPremium(filter?: any): Observable<CustomerChurn> {\n    filter = filter || {};\n\n    return this.http.get<CustomerChurn>(this.config.API_SERVER + '/v1/stats/customers/premium', {\n      params: filter,\n      headers: this.headers,\n      withCredentials: true\n    }).pipe(\n      map(churn => {\n        return {\n          churn:churn.churn||[],\n          users:churn.users.map(user => new User(user))\n        }\n      })\n    );\n  }\n\n  customerQuit(filter?: any): Observable<CustomerChurn> {\n    filter = filter || {};\n\n    return this.http.get<CustomerChurn>(this.config.API_SERVER + '/v1/stats/customers/quit', {\n      params: filter,\n      headers: this.headers,\n      withCredentials: true\n    }).pipe(\n      map(churn => {\n        return {\n          churn:churn.churn||[],\n          users:churn.users.map(user => new User(user))\n        }\n      })\n    );\n  }\n\n  customerChurn(filter?: any): Observable<any> {\n    filter = filter || {};\n\n    return this.http.get<any[]>(this.config.API_SERVER + '/v1/stats/customers/churn', {\n      params: filter,\n      headers: this.headers,\n      withCredentials: true\n    });\n  }\n\n  // Reçoit un statut de requête http\n  // app.get ('/v1/validate/:uid/:email', emails.validate);\n  validate(id, email): Observable<any> {\n    if (!id || !email) {\n      return _throw(new Error('validate, missing parameter id or email'));\n    }\n\n\n    return this.http.get(this.config.API_SERVER + '/v1/validate/' + id + '/' + email, {\n      headers: this.headers,\n      withCredentials: true\n    });\n\n  }\n\n  // app.post('/v1/validate/create',auth.ensureAuthenticated, emails.create);\n  validateEmail(params?: any): Observable<any> {\n    return this.http.post<{created: Date, email: string}>(this.config.API_SERVER + '/v1/validate/create', params || {}, {\n      headers: this.headers,\n      withCredentials: true\n    }).pipe(\n      map(result => {\n        this.currentUser.email.status = result.created;\n        return this.currentUser;\n      }),\n      tap(user => this.user$.next(user))\n    );\n  }\n\n  // app.post('/v1/recover/:token/:email/password', users.recover);\n  recover(email): Observable<any> {\n    return this.http.post(this.config.API_SERVER + '/v1/recover/' + this.config.shared.token + '/' + email + '/password', {\n      headers: this.headers,\n      withCredentials: true\n    });\n  }\n\n\n\n  // app.post('/v1/users/:id', users.ensureMeOrAdmin,users.update);\n  save(user): Observable<User> {\n    // autofill the address name when available\n    user.populateAdresseName();\n    return this.http.post<User>(this.config.API_SERVER + '/v1/users/' + user.id, user, {\n      headers: this.headers,\n      withCredentials: true\n    }).pipe(\n      map(user => this.updateCache(user)),\n      tap(user => this.user$.next(user))\n    );\n  }\n\n  // app.get ('/logout', auth.logout);\n  logout(): Observable<User> {\n    return this.http.get<User>(this.config.API_SERVER + '/logout/', {\n      headers: this.headers,\n      withCredentials: true\n    }).pipe(\n      catchError(err => of(new User())),\n      map(user => Object.assign(this.currentUser, new User({},this.currentUser.email.address))),\n      tap(user => {\n        // console.log('user.logout()', user);\n        return this.user$.next(user);\n      })\n    );\n  }\n\n  // TODO voir lignes commentées (updateGeoCode etc.)\n  // app.post('/register', queued(auth.register_post));\n  register(user): Observable<User> {\n    // user.populateAdresseName();\n    return this.http.post<User>(this.config.API_SERVER + '/register', user, {\n      headers: this.headers,\n      withCredentials: true\n    }).pipe(\n      map(user => this.updateCache(user)),\n      tap(user => this.user$.next(user))\n    );\n\n  }\n  // app.post('/v1/users/:id/password',users.ensureMe, users.password);\n  newpassword(id: number, change): Observable<User> {\n    return this.http.post<User>(this.config.API_SERVER + '/v1/users/' + id + '/password', change, {\n      headers: this.headers,\n      withCredentials: true\n    });\n  }\n\n\n  //\n  // FIXME: make this a real service with specs (current version is not secure)\n  login(data): Observable<User> {\n    return this.http.post<User>(this.config.API_SERVER + '/login', data, {\n      headers: this.headers,\n      withCredentials: true\n    }).pipe(\n      map(user => this.updateCache(user)),\n      tap(user => {\n        try{\n          // store a marker as helper for the next login\n          if(!user.isAdmin || !user.isAdmin()) {\n            localStorage.setItem('kng-auth',user.email.address);\n          }\n        }catch(err) {}\n        this.user$.next(user)\n      })\n    );\n  }\n\n  // app.put('/v1/users/:id', auth.ensureAdmin, auth.checkPassword, users.remove);\n  remove(id, password): Observable<any> {\n    return this.http.put<User>(this.config.API_SERVER + '/v1/users/' + id, { password }, {\n      headers: this.headers,\n      withCredentials: true\n    }).pipe(\n      map(user => this.deleteCache(user))\n    );\n  }\n\n  // app.post('/v1/users/:id/like/:sku', users.ensureMe, users.like);\n  love(id, product): Observable<User> {\n    // var self=this, params={};\n    return this.http.post<User>(this.config.API_SERVER + '/v1/users/' + id + '/like/' + product.sku, null, {\n      headers: this.headers,\n      withCredentials: true\n    }).pipe(\n      map(user => this.updateCache(user)),\n      tap(user => this.user$.next(user))\n    );\n  }\n  // ================================================\n\n\n  addressAdd(uid,address: UserAddress) {\n    if (!address||!address.name) {\n      return _throw(new Error('addressUpdate missing address content'));\n    }\n    return this.http.post<User>(this.config.API_SERVER + '/v1/users/' + uid + '/address/add', address, {\n      headers: this.headers,\n      withCredentials: true\n    }).pipe(\n      map(user => this.updateCache(user)),\n      tap(user => this.user$.next(user))\n    );\n\n  }\n\n  addressRemove(uid, address: UserAddress) {\n    if (!address||!address.id) {\n      return _throw(new Error('addressUpdate missing address id'));\n    }\n    return this.http.post<User>(this.config.API_SERVER + '/v1/users/' + uid + '/address/remove', address, {\n      headers: this.headers,\n      withCredentials: true\n    }).pipe(\n      map(user => this.updateCache(user)),\n      tap(user => this.user$.next(user))\n    );\n  }\n\n  addressUpdate(uid, address: UserAddress) {\n    if (!address||!address.id) {\n      return _throw(new Error('addressUpdate missing address id'));\n    }\n    return this.http.post<User>(this.config.API_SERVER + '/v1/users/' + uid + '/address/update', address, {\n      headers: this.headers,\n      withCredentials: true\n    }).pipe(\n      map(user => this.updateCache(user)),\n      tap(user => this.user$.next(user))\n    );\n  }\n\n  /**\n   * payment methods\n   */\n  // app.post('/v1/users/:id/payment/:alias/check', users.ensureMeOrAdmin,users.checkPaymentMethod);\n  checkPaymentMethod(user, askIntent?: string, amount?:number): Observable<User> {\n    //\n    // if payment list is empty, and also ask intent\n    if (!user.payments.length && !askIntent) {\n      return of(user);\n    }\n\n    const params: any = { };\n    if (askIntent) {\n      params.intent = askIntent;\n    }\n    if(amount) {\n      params.amount = amount;\n    }\n\n    return this.http.post<any>(this.config.API_SERVER + '/v1/users/' + user.id + '/payment/-/check', {}, {\n      params,\n      headers: this.headers,\n      withCredentials: true\n    }).pipe(\n      map(check => {\n        //\n        // store payment intent\n        if (check.intent) {\n          user.context = user.context || {};\n          user.context.intent = check.intent;\n        }\n        user.payments.forEach((payment, i) => {\n          payment.error = check[payment.alias] && check[payment.alias].error;\n        });\n        return this.updateCache(user);\n      })\n    );\n  }\n\n  // app.post('/v1/users/:id/payment', users.ensureMeOrAdmin,users.addPayment);\n  addPaymentMethod(payment: UserCard, uid, replace?: boolean): Observable<User> {\n    if (!payment.id) {\n      return _throw(new Error('addPaymentMethod missing payment id'));\n    }\n    const params: any = {};\n    if (replace) {\n      params.force_replace = true;\n    }\n\n    return this.http.post<User>(this.config.API_SERVER + '/v1/users/' + uid + '/payment', payment, {\n      params,\n      headers: this.headers,\n      withCredentials: true\n    }).pipe(\n      map(user => this.updateCache(user)),\n      tap(user => this.user$.next(user))\n    );\n  }\n\n  // app.post('/v1/users/:id/payment', users.ensureMeOrAdmin,users.addPayment);\n  addPaymentCreditMethod(uid, month:string, year: string): Observable<User> {\n    const params: any = {};\n    const credit ={\n      month,year\n    }\n\n    return this.http.post<User>(this.config.API_SERVER + '/v1/users/' + uid + '/payment/credit', credit, {\n      params,\n      headers: this.headers,\n      withCredentials: true\n    }).pipe(\n      map(user => this.updateCache(user)),\n      tap(user => this.user$.next(user))\n    );\n  }\n\n\n  // app.post('/v1/users/:id/payment/:alias/delete', users.ensureMeOrAdmin,users.deletePayment);\n  deletePaymentMethod(alias, uid): Observable<User> {\n    const updatePayment = (uid) => {\n      const user = this.cache.map.get(uid);\n      user.payments = user.payments.filter(p => p.alias != alias);\n      return user;\n    };\n    if (!alias || !uid) {\n      return _throw(new Error('deletePaymentMethod, missing params!'));\n    }\n    return this.http.post<User>(this.config.API_SERVER + '/v1/users/' + uid + '/payment/' + alias + '/delete', null, {\n      headers: this.headers,\n      withCredentials: true\n    }).pipe(\n      map(() => updatePayment(uid)),\n      tap(user => this.user$.next(user))\n    );\n  }\n\n  /**\n   * ADMIN\n   */\n  // app.post('/v1/users/:id/status', auth.ensureAdmin,users.status);\n  updateStatus(id, status): Observable<User> {\n    // var self = this, params = {};\n    return this.http.post<User>(this.config.API_SERVER + '/v1/users/' + id + '/status', { status }, {\n      headers: this.headers,\n      withCredentials: true\n    }).pipe(\n      map(user => new User(user)),\n      tap(user => this.user$.next(user))\n    );\n  }\n\n  /**\n   * Subscribe to the user stream.\n   */\n  subscribe(\n    onNext, onThrow?: ((exception: any) => void)|null,\n    onReturn?: (() => void)|null): ISubscription {\n      return this.user$.subscribe({next: onNext, error: onThrow, complete: onReturn});\n  }\n\n}\n","import { Injectable } from '@angular/core';\nimport { LoaderService } from './loader.service'\nimport { Observable } from \"rxjs\";\nimport { User, UserService } from './user.service'\n\n@Injectable()\nexport class IsAuthenticated {\n  constructor(\n    private $user:UserService\n    ) {}\n\n  //this prevent user from entering dashboard component when not logged\n  //use Observable to prevent error when refreshing the page\n  //see issue : https://stackoverflow.com/questions/42677274/angular-2-route-guard-not-working-on-browser-refresh/42678548\n  canActivate() {\n    return this.$user.currentUser.isAuthenticated();\n  }\n}\n\n\n@Injectable()\nexport class IsAdmin {\n  constructor(\n    private $user:UserService\n    ) {}\n\n  canActivate() {\n    return this.$user.currentUser.isAdmin();\n  }\n}\n\n// https://angular.io/api/router/CanActivate\n// @Injectable()\n// class CanActivateTeam implements CanActivate {\n//   constructor(private permissions: Permissions, private currentUser: UserToken) {}\n\n//   canActivate(\n//     route: ActivatedRouteSnapshot,\n//     state: RouterStateSnapshot\n//   ): Observable<boolean>|Promise<boolean>|boolean {\n//     return this.permissions.canActivate(this.currentUser, route.params.id);\n//   }\n// }\n","import { HttpClient, HttpErrorResponse, HttpHeaders, HttpRequest, HttpEventType } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { Config, config, configCors } from './config';\n\nimport { ReplaySubject, Observable, throwError as _throw, of, BehaviorSubject, throwError, Subject } from 'rxjs';\nimport { map, catchError, tap, filter } from 'rxjs/operators';\nimport { AnalyticsService } from './metrics.service';\n\n\nexport interface Assistant {\n  deleted: boolean;\n}\n\n/**\n * ✅ AssistantStep - Étape d'exécution d'un agent\n */\nexport interface AssistantStep {\n  description: string;\n  tool?: string;\n  status?: 'pending' | 'running' | 'completed' | 'error';\n  result?: any;\n}\n\n/**\n * ✅ Usage - Statistiques d'utilisation des tokens\n */\nexport interface Usage {\n  prompt: number;\n  completion: number;\n  cost: number;\n  total: number;\n}\n\n/**\n * ✅ AssistantState - État de l'assistant pour la gestion UI\n */\nexport interface AssistantState {\n  status: 'init' | 'prompt' | 'running' | 'end' | 'error';\n  usage?: Usage;\n  agent?: string;\n  content?: string;\n  steps?: AssistantStep[];\n  error?: string;\n  thinking?: boolean;\n}\n\n/**\n * ✅ AssistantMessage - Message dans la discussion\n */\nexport interface AssistantMessage {\n  id: string;\n  role: 'user' | 'assistant';\n  content: string;\n  timestamp: Date;\n  steps?: AssistantStep[];\n}\n\n/**\n * ✅ ClientDiscussion - Discussion complète avec l'assistant\n */\nexport interface ClientDiscussion {\n  id: string | null;\n  messages: AssistantMessage[];\n  usage: Usage;\n  agent?: string;\n  createdAt: Date;\n  updatedAt: Date;\n}\n\n/**\n * ✅ Extract steps from a message content\n */\nexport function parseSteps(message: string): AssistantStep[] {\n  if (!message) return [];\n  const jsonraw = message.match(/<step>([\\s\\S]*?)<\\/step>/gm)?.map(step => step.replace(/<\\/?step>/g, '')) || [];\n  return jsonraw?.map(step => {\n    try {\n      const parsed = JSON.parse(step);\n      return { description: parsed.description || step, ...parsed };\n    } catch (e) {\n      return { description: step };\n    }\n  }) || [];\n}\n\n//\n// Internal cache of request\n// simple way to share instance between components\nclass Cache {\n  list: Assistant[];\n  map: Map<string, Assistant> //key is a slug\n  constructor() {\n    this.list = [];\n    this.map = new Map();\n  }\n}\n\n@Injectable()\nexport class AssistantService {\n  //\n  // common multicast to update UX when one shop on the list is modified\n  // use it for singleton usage of assistant\n  public assistant$: ReplaySubject<Assistant>;\n  public assistants$: BehaviorSubject<Assistant[]> | ReplaySubject<Assistant[]>;\n\n  config: any;\n\n  // ✅ Default values\n  private defaultUsage: Usage = { prompt: 0, completion: 0, cost: 0, total: 0 };\n  private defaultState: AssistantState = { status: 'init', usage: this.defaultUsage };\n\n  // ✅ StateGraph BehaviorSubjects\n  private discussionSubject = new BehaviorSubject<ClientDiscussion>({\n    id: null,\n    messages: [],\n    usage: this.defaultUsage,\n    createdAt: new Date(),\n    updatedAt: new Date()\n  });\n\n  private stateSubject = new BehaviorSubject<AssistantState>(this.defaultState);\n  private transcriptionsSubject = new BehaviorSubject<string>('');\n  private memoriesSubject = new BehaviorSubject<any[]>([]);\n\n  // ✅ Event system for prompt cross-component communication\n  private promptEventSubject = new Subject<string>();\n\n  // ✅ Public observables\n  discussion$ = this.discussionSubject.asObservable();\n  state$ = this.stateSubject.asObservable();\n  transcriptions$ = this.transcriptionsSubject.asObservable();\n  memories$ = this.memoriesSubject.asObservable();\n  promptEvt$ = this.promptEventSubject.asObservable();\n\n  private cache: Cache = new Cache();\n  private headers: HttpHeaders;\n  private defaultConfig: Config = config;\n\n  constructor(\n    private $http: HttpClient\n  ) {\n    this.headers = new HttpHeaders({\n      'Content-Type': 'application/json',\n      'Cache-Control': 'no-cache',\n      'Pragma': 'no-cache',\n      'ngsw-bypass': 'true',\n      'k-dbg': AnalyticsService.FBP\n    });\n    this.config = config;\n\n    this.assistants$ = new BehaviorSubject<Assistant[]>(null);\n  }\n\n  // ✅ StateGraph getters\n  get discussion(): ClientDiscussion {\n    return this.discussionSubject.value;\n  }\n\n  get discussionMessages(): AssistantMessage[] {\n    return this.discussion.messages;\n  }\n\n  get state(): AssistantState {\n    return this.stateSubject.value;\n  }\n\n  private deleteCache(slug: string): Assistant {\n    const incache = this.cache.map.get(slug);\n    if (incache) {\n      incache.deleted = true;\n      this.cache.map.delete(slug);\n    }\n    return incache;\n  }\n\n  private updateCache(assistant: Assistant): Assistant {\n    return assistant;\n  }\n\n  /**\n   * ✅ Clean text from thinking and step tags\n   */\n  private cleanText(text: string): string {\n    return text\n      .replace(/<thinking>[\\s\\S]*?<\\/thinking>/g, '')\n      .replace(/^<step.*$/gm, '')\n      .replace(/<memories>[\\s\\S]*?<\\/memories>/g, '');\n  }\n\n  /**\n   * ✅ Update state with partial values\n   */\n  updateState(partial: Partial<AssistantState>) {\n    this.stateSubject.next({\n      ...this.state,\n      ...partial\n    });\n  }\n\n  /**\n   * ✅ Cross-component prompt communication + chat trigger\n   */\n  sendPrompt(prompt: string, options?: { agent?: string, ragname?: string, thinking?: boolean }) {\n    this.promptEventSubject.next(prompt);\n    return this.chat({ q: prompt, agent: options?.agent, ragname: options?.ragname, thinking: options?.thinking });\n  }\n\n  /**\n   * ✅ Get history from server\n   */\n  history(opts?): Observable<ClientDiscussion | Assistant[]> {\n    opts = opts || {};\n    const query = new URLSearchParams(opts);\n\n    return this.$http.get<any>(this.defaultConfig.API_SERVER + '/v1/assistant/history?' + query.toString(), {\n      headers: this.headers,\n      withCredentials: (configCors())\n    }).pipe(\n      tap((res: any) => {\n        // Process messages to remove memory content\n        if (res.messages && Array.isArray(res.messages)) {\n          res.messages = res.messages.map((msg: any) => {\n            if (typeof msg.content === 'string') {\n              msg.content = msg.content.replace(/<memories [^>]+[\\s\\S]*?<\\/memories>/g, '');\n            }\n            return msg;\n          });\n        }\n\n        // Update StateGraph discussion if response has messages\n        if (res.messages) {\n          this.discussionSubject.next(res);\n          const state: Partial<AssistantState> = {\n            usage: res.usage || this.defaultUsage,\n            agent: res.agent || opts.agent || this.state.agent,\n          };\n          this.stateSubject.next({ ...this.state, ...state });\n        } else {\n          // Legacy format: array of messages\n          this.assistants$.next(res);\n        }\n        return res;\n      }),\n      catchError((err: HttpErrorResponse) => {\n        if (err.status == 401) {\n          return of([]);\n        }\n        // FIXME: Add notify() method for error display (Shoelace or other)\n        return throwError(err)\n      })\n    )\n  }\n\n  /**\n   * ✅ Delete a message from history\n   */\n  historyDel(messageId: string, agent?: string): Observable<any> {\n    if (!messageId) {\n      return of(this.discussionSubject.value);\n    }\n\n    const agentParam = agent || 'current';\n    return this.$http.post(this.defaultConfig.API_SERVER + `/v1/assistant/history/none/${messageId}`, {}, {\n      headers: this.headers,\n      withCredentials: (configCors())\n    }).pipe(\n      tap((res: any) => {\n        this.discussionSubject.next(res);\n      }),\n      catchError((err: HttpErrorResponse) => {\n        // FIXME: Add notify() method for error display\n        console.error('historyDel error:', err);\n        return of(err);\n      })\n    );\n  }\n\n  /**\n   * ✅ Get memories from RAG\n   */\n  memories(): Observable<any> {\n    return this.$http.get(this.defaultConfig.API_SERVER + '/v1/assistant/memories', {\n      headers: this.headers,\n      withCredentials: (configCors())\n    }).pipe(\n      tap((memories: any) => {\n        this.memoriesSubject.next(memories);\n      }),\n      catchError((err: HttpErrorResponse) => {\n        // FIXME: Add notify() method for error display\n        console.error('memories error:', err);\n        return of([]);\n      })\n    );\n  }\n\n  /**\n   * ✅ Delete a memory from RAG\n   */\n  memoryDel(id: string): Observable<any> {\n    return this.$http.delete(this.defaultConfig.API_SERVER + `/v1/assistant/memories/${id}`, {\n      headers: this.headers,\n      withCredentials: (configCors())\n    }).pipe(\n      tap(() => {\n        const current = this.memoriesSubject.value;\n        this.memoriesSubject.next(current.filter((m: any) => m.id !== id));\n        // FIXME: Add notify() method for success display\n      }),\n      catchError((err: HttpErrorResponse) => {\n        // FIXME: Add notify() method for error display\n        console.error('memoryDel error:', err);\n        return of(err);\n      })\n    );\n  }\n\n  /**\n   * ✅ Add temporary user message to discussion\n   */\n  private addTemporaryUserMessage(prompt: string, agent: string) {\n    const currentDiscussion = this.discussionSubject.value;\n    const tempMessage: AssistantMessage = {\n      id: `temp-user-${Date.now()}`,\n      role: 'user',\n      content: prompt,\n      timestamp: new Date()\n    };\n\n    this.discussionSubject.next({\n      ...currentDiscussion,\n      messages: [...currentDiscussion.messages, tempMessage],\n      updatedAt: new Date()\n    });\n  }\n\n  /**\n   * ✅ Create temporary assistant message at start of streaming\n   */\n  private createTemporaryAssistantMessage(): string {\n    const currentDiscussion = this.discussionSubject.value;\n    const messages = [...currentDiscussion.messages];\n\n    const existing = messages.find(msg =>\n      msg.role === 'assistant' && msg.id.startsWith('temp-assistant-')\n    );\n    if (existing) {\n      return existing.id;\n    }\n\n    const tempAssistantMessage: AssistantMessage = {\n      id: `temp-assistant-${Date.now()}`,\n      role: 'assistant',\n      content: '',\n      timestamp: new Date(),\n      steps: []\n    };\n    messages.push(tempAssistantMessage);\n\n    this.discussionSubject.next({\n      ...currentDiscussion,\n      messages,\n      updatedAt: new Date()\n    });\n\n    return tempAssistantMessage.id;\n  }\n\n  /**\n   * ✅ Update existing temporary assistant message\n   */\n  private updateTemporaryAssistantMessage(content: string, steps?: AssistantStep[]) {\n    const currentDiscussion = this.discussionSubject.value;\n    const messages = currentDiscussion.messages;\n\n    const assistantMsgIndex = messages.findIndex(msg =>\n      msg.role === 'assistant' && msg.id.startsWith('temp-assistant-')\n    );\n\n    if (assistantMsgIndex !== -1) {\n      const existingMessage = messages[assistantMsgIndex];\n      existingMessage.content = content;\n      if (steps) {\n        existingMessage.steps = steps;\n      }\n    }\n  }\n\n  //\n  // REST api wrapper with streaming support\n  chat(params: any): Observable<any> {\n    const options: any = {\n      credentials: 'include',\n      method: 'post',\n      cache: \"no-cache\",\n      headers: {\n        \"Content-Type\": \"application/json\",\n        \"k-dbg\": AnalyticsService.FBP,\n        'ngsw-bypass': 'true'\n      }\n    };\n    if (configCors()) {\n      options.mode = 'cors';\n    }\n    if (params.body) {\n      options.body = JSON.stringify(params.body)\n      delete params.body;\n    }\n\n    //\n    // force no-cache\n    params.rnd = Date.now();\n    const query = new URLSearchParams(params || {});\n\n    // ✅ Add temporary user message\n    const prompt = params.q || params.query || '';\n    const agent = params.agent || 'current';\n    if (prompt) {\n      this.addTemporaryUserMessage(prompt, agent);\n      this.updateState({\n        status: 'prompt',\n        content: prompt,\n        agent: agent,\n        thinking: params.thinking || false\n      });\n    }\n\n    return new Observable<any>(observer => {\n      const xhr = new XMLHttpRequest();\n      let messageCreated = false;\n      let stepsAccum: AssistantStep[] = [];\n      let contentAccum = '';\n\n      try {\n        xhr.open('POST', this.defaultConfig.API_SERVER + '/v1/assistant/thread?' + query.toString(), true);\n        //\n        // remove it for no CORS\n        if (configCors()) {\n          xhr.withCredentials = true;\n        }\n        xhr.setRequestHeader('ngsw-bypass', 'true');\n        xhr.setRequestHeader(\"k-dbg\", AnalyticsService.FBP);\n        xhr.setRequestHeader('Content-Type', 'application/json');\n        xhr.setRequestHeader('Accept', 'text/event-stream');\n        xhr.setRequestHeader('Cache-Control', 'no-cache');\n        // we must make use of this on the server side if we're working with Android - because they don't trigger\n        // readychange until the server connection is closed\n        xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');\n\n        //\n        // decode json data\n        // => /(${anchor}:)[^{]*(.*?\\})/gi\n        const anchor = params.anchor || 'zqyw';\n        const jsonEx = new RegExp(`(${anchor}:)(.*)`, \"gim\");\n        //const skuBlock = /{{(.*?)}}/ig;\n        const skuBlock = /{{([\\d,]*?)}}|\\[([\\d,]*?)\\]/ig;\n        let responseText = '';\n        let fullcontent = '';\n\n        let lastIndex = 0;\n        xhr.onprogress = () => {\n          const index = xhr.responseText.length;\n          if (lastIndex == index) {\n            return;\n          }\n\n          // ✅ Create temp assistant message on first chunk\n          if (!messageCreated) {\n            this.createTemporaryAssistantMessage();\n            messageCreated = true;\n          }\n\n          responseText = xhr.responseText;\n          const text = responseText.substring(lastIndex).replace(skuBlock, '');\n          const json = jsonEx.exec(text);\n          let tool = {};\n          if (json && json[2]) {\n            try { tool = JSON.parse(`${json[2]}`); } catch (err) { }\n          }\n\n          lastIndex = index;\n          fullcontent += text;\n\n          // ✅ Parse steps incrementally\n          const chunkSteps = parseSteps(text);\n          if (chunkSteps.length) {\n            stepsAccum = [...stepsAccum, ...chunkSteps];\n            this.updateState({\n              status: 'running',\n              steps: stepsAccum,\n              agent: agent\n            });\n          }\n\n          // ✅ Update content and temp message\n          const cleanedText = this.cleanText(text);\n          if (cleanedText && cleanedText.trim()) {\n            contentAccum += cleanedText;\n            this.updateState({\n              status: 'running',\n              content: contentAccum,\n              agent: agent\n            });\n            this.updateTemporaryAssistantMessage(contentAccum, stepsAccum);\n          }\n\n          observer.next({ text: text.replace(jsonEx, ''), tool }); // Envoyer le chunk au subscriber\n        };\n\n        xhr.onload = () => {\n          // xhr.responseText;\n          const skus = responseText.match(skuBlock);\n          let tool = {};\n\n          //\n          // our template content\n          if (skus && skus.length) {\n            tool = skus.map(match => match.replace(/{{|}}/g, '').split(',')).flat().map(sku => (+sku)).filter(sku => sku);\n          }\n\n          // ✅ Update state to end\n          this.updateState({\n            status: 'end',\n            agent: agent,\n            content: undefined,\n            steps: undefined\n          });\n\n          //observer.next({text:fullcontent,tool});\n          observer.complete();\n        };\n\n        xhr.onerror = () => {\n          this.updateState({\n            status: 'error',\n            error: 'network',\n            agent: agent,\n            content: undefined,\n            steps: undefined\n          });\n          observer.error(new TypeError('Network request error'));\n          observer.complete();\n        }\n        xhr.ontimeout = () => {\n          this.updateState({\n            status: 'error',\n            error: 'timeout',\n            agent: agent,\n            content: undefined,\n            steps: undefined\n          });\n          observer.error(new TypeError('Network request timed out'));\n          observer.complete();\n        }\n\n        xhr.send(options.body);\n\n      } catch (err) {\n        console.log('---- err', err);\n        this.updateState({\n          status: 'error',\n          error: 'exception',\n          agent: agent\n        });\n        observer.error(err);\n        observer.complete();\n      }\n\n      return {\n        abort() {\n          xhr.abort();\n        },\n        unsubscribe() {\n        }\n      };\n    });\n  }\n\n  /**\n   * ✅ Whisper transcription API\n   */\n  whisper(state: { blob?: Blob, chunk?: Blob, type?: string, silent?: boolean, previousText?: string }): Observable<string> {\n    if ((!state?.blob && !state?.chunk) || state.silent) {\n      return of('');\n    }\n\n    const formData = new FormData();\n    formData.append('audio', state.blob || state.chunk);\n    formData.append('type', state.type || 'prompt');\n    formData.append('file', 'audio.wav');\n\n    if (state.previousText) {\n      formData.append('previousText', state.previousText);\n    }\n\n    // FIXME: Backend endpoint should be /v1/assistant/transcribe\n    return this.$http.post<{ transcription: string }>(this.defaultConfig.API_SERVER + '/v1/assistant/transcribe', formData, {\n      withCredentials: (configCors())\n    }).pipe(\n      map(resp => {\n        const transcription = resp.transcription || '';\n        this.transcriptionsSubject.next(transcription);\n        return transcription;\n      }),\n      catchError((err: HttpErrorResponse) => {\n        // FIXME: Add notify() method for error display with proper error messages\n        console.error('whisper error:', err);\n        let errorMessage = 'Erreur lors de la transcription audio';\n        if (err.status === 413) {\n          errorMessage = err.error?.message || 'Le fichier audio est trop volumineux';\n        } else if (err.status === 400) {\n          errorMessage = err.error?.error || err.error?.message || 'Format audio non supporté';\n        } else if (err.status === 0) {\n          errorMessage = 'Erreur de connexion au serveur';\n        }\n        return throwError(new Error(errorMessage));\n      })\n    );\n  }\n\n  /**\n   * ✅ Abort current operation\n   */\n  abort() {\n    this.updateState({\n      status: 'end'\n    });\n  }\n\n  /**\n   * ✅ Send message via email\n   */\n  message(content: string, subject?: string, audioContext?: { audioUrl?: string, transcription?: string, cartUrl?: string }): Observable<any> {\n    const payload: any = { content, subject };\n    if (audioContext) {\n      Object.assign(payload, audioContext);\n    }\n    return this.$http.post<any>(this.defaultConfig.API_SERVER + '/v1/assistant/message', payload, {\n      headers: this.headers,\n      withCredentials: (configCors())\n    })\n  }\n\n  // FIXME: Add notify() method for UI notifications\n  // notify(message: string, variant = 'primary', icon = 'info-circle', duration = 9000) {\n  //   // Implementation depends on UI library (Shoelace, Material, etc.)\n  //   // For Shoelace:\n  //   // const alert = Object.assign(document.createElement('sl-alert'), {\n  //   //   variant,\n  //   //   closable: true,\n  //   //   duration: duration,\n  //   //   innerHTML: `<sl-icon name=\"${icon}\" slot=\"icon\"></sl-icon>${message}`\n  //   // });\n  //   // document.body.append(alert);\n  //   // return alert.toast();\n  // }\n}\n","import { HttpClient, HttpHeaders } from '@angular/common/http';\nimport { Injectable, Inject } from '@angular/core';\n\nimport { Config, config, configCors } from './config';\nimport { DepositAddress } from './user.service';\n\n\n// import { _throw } from 'rxjs/observable/throw';\nimport { Observable, of, throwError } from 'rxjs';\n// import { of } from 'rxjs/observable/of';\nimport { ReplaySubject } from 'rxjs';\nimport { map, tap, retryWhen, delay, take, distinctUntilChanged, concatMap } from 'rxjs/operators';\n\n\n@Injectable()\nexport class ConfigService {\n\n  public static defaultConfig = new Config({\n    isAvailable: true,\n    API_SERVER: 'http://localhost:4000',\n\n    API_VERSION: '/v1',\n\n    LOG_LEVEL: 'debug',\n\n    AUTH_SUCCESS_REDIRECT_URL: '/',\n    AUTH_ERROR_REDIRECT_URL: '/login',\n\n    user: {\n    },\n\n    shared: {\n    },\n    loader: [],\n    preloadOrders: 5,\n    loginPath: ['/admin', '/account'],\n    readonlyPath: ['/wallet/create'],\n    avoidShopUIIn: ['/admin', '/login', '/signup', '/content']\n\n  });\n\n  private headers: HttpHeaders;\n  public config: Observable<Config>;\n  public config$: ReplaySubject<Config>;\n\n  constructor(\n    @Inject('KNG2_OPTIONS') private customConfig: any,\n    private http: HttpClient\n  ) {\n\n    //\n    // Use dynamic server settings\n    if (!customConfig.API_SERVER) {\n      // customConfig.API_SERVER = ('//api.' + window.location.hostname);\n      customConfig.API_SERVER = ('https://' + window.location.hostname + '/api');\n    }\n\n\n    Object.assign(ConfigService.defaultConfig, customConfig || {});\n    // FIXME, remove this hugly config propagation\n    Object.assign(config, customConfig || {});\n\n\n    this.headers = new HttpHeaders({\n      'Content-Type': 'application/json',\n      'Cache-Control' : 'no-cache',\n      'Pragma' : 'no-cache',\n      'ngsw-bypass':'true'\n    });\n    //\n    // ReplaySubject IFF disctinct config\n    this.config$ = new ReplaySubject<Config>(1);\n    this.config$.pipe(distinctUntilChanged((prev, curr) => {\n      const ps = prev.shared;\n      const cs = curr.shared;\n      console.log(cs.timestamp,cs.hub && cs.hub.update)\n      if(ps.timestamp !== cs.timestamp){\n        return true;\n      }\n      if(cs.hub !== ps.hub) {\n        return true\n      }\n      if(cs.hub && ps.hub && cs.hub.updated !== ps.hub.updated){\n        return true;\n      }\n      return false;\n    }));\n  }\n\n\n  get(hub?: string): Observable<Config> {\n    const params: any = { lang: this.locale };\n    hub && (params.hub = hub);\n    this.config = this.http.get<any>(ConfigService.defaultConfig.API_SERVER + '/v1/config', {\n      headers: this.headers,\n      params: (params)\n    }).pipe(\n      retryWhen(errors => errors.pipe(\n        delay(1000),\n        concatMap((err, index) => index === 3 ? throwError(err) : of(null)))\n      ),\n      map((shared: any) => {\n        //\n        // based on server timestamp, previous config is more recent\n        // console.log('--DEBUG cfg local', config.shared.timestamp, config.shared.hub);\n        // console.log('--DEBUG cfg serve', shared.timestamp, shared.hub);\n        // if (config.shared.timestamp > shared.timestamp) {\n        const sharedHasHUB = shared.hub && shared.hub.name;\n        const localHasHub = config.shared.hub && config.shared.hub.slug;\n        if (localHasHub &&\n           !sharedHasHUB) {\n            return config;\n        }\n        //\n        // reset hub config\n        if(shared.hub){\n          config.shared.hub = shared.hub;\n        }\n        Object.assign(config, ConfigService.defaultConfig);\n        Object.assign(config.shared, shared);\n\n        //\n        // fill dates\n        config.shared.shippingweek = (shared.shippingweek || []).map(date => new Date(date));\n\n        //\n        // HUB extension\n        if (config.shared.hub) {\n\n          const initNoShippping = noshipping => {\n            noshipping.from = new Date(noshipping.from);\n            noshipping.to = new Date(noshipping.to);\n          };\n          config.shared.hub.noshipping = config.shared.hub.noshipping || [];\n          config.shared.hub.noshipping.forEach(initNoShippping);\n\n          config.shared.hubs.forEach(hub => {\n            hub.noshipping.forEach(initNoShippping);\n          });\n\n\n          const initDeposit = deposit => new DepositAddress(deposit);\n\n          //\n          // deposits\n          config.shared.hub.deposits = (config.shared.hub.deposits || []).map(initDeposit);\n          config.shared.hubs.forEach(hub => {\n            hub.deposits = (hub.deposits||[]).map(initDeposit);\n          })\n        }\n\n        config.shared.faq = config.shared.faq || [];\n        config.shared.faq_title = config.shared.faq_title || {en:\"\",fr:\"\"};\n        return config;\n      }),\n      tap(config => {\n        this.config$.next(config);\n        return config;\n      })\n    );\n    return this.config;\n  }\n\n\n  setServer(url: string) {\n    if (!url) {\n      throw new Error('set server url is Null');\n    }\n    ConfigService.defaultConfig.API_SERVER = url;\n    //\n    // TODO save url to the localStorage AND use it on load\n  }\n\n  save(config: Config, cid?: string): Observable<any> {\n    const hub = config.shared.hub;\n    delete config.shared.hub;\n    return this.http.post<any>(ConfigService.defaultConfig.API_SERVER + '/v1/config', config.shared, {\n      headers: this.headers,\n      withCredentials: true\n    }).pipe(\n      map((shared: any) => {\n        Object.assign(config, ConfigService.defaultConfig);\n        Object.assign(config.shared, shared);\n\n        //\n        // dates\n        config.shared.shippingweek = (shared.shippingweek || []).map(date => new Date(date));\n\n        //\n        // HUB extension\n        if (config.shared.hub) {\n          config.shared.hub.noshipping = config.shared.hub.noshipping || [];\n          config.shared.hub.noshipping.forEach(noshipping => {\n            noshipping.from = new Date(noshipping.from);\n            noshipping.to = new Date(noshipping.to);\n          });\n\n          //\n          // deposit\n          config.shared.hub.deposits = (config.shared.hub.deposits || []).map(deposit => new DepositAddress(deposit));\n        }\n        //\n        // restore HUB associated before the save\n        else {\n          config.shared.hub = hub;\n        }\n\n        config.shared.hub.home.customLink = config.shared.hub.home.customLink || {};\n        config.shared.faq == config.shared.faq || [];\n        config.shared.faq_title = config.shared.faq_title || {en:\"\",fr:\"\"};\n\n        return config;\n      }),\n      tap(config => this.config$.next(config))\n    );\n  }\n\n\n  //\n  // TODO wait for angular to fix i18n issue (runtime switch)\n  // - http://www.ngx-translate.com/ (for dynamic AOT issue?)\n  // - https://github.com/angular/angular/issues/11405 (for in ts translation)\n  // - https://angular.io/guide/i18n (for static translation AOT compatible!)\n  // - https://medium.com/@feloy/deploying-an-i18n-angular-app-with-angular-cli-fc788f17e358 (build locale targets)\n  //   +--> https://github.com/ngx-translate/core/issues/495 (plan to integrate runtime lang switch and keep AOT compliant)\n  set locale(lang: string) {\n    const baseLocale = lang.split('-')[0];\n    try {\n      localStorage.setItem('kng2-locale', baseLocale);\n    } catch (e) {}\n  }\n\n  get locale() {\n    // FIXME default locale should not be hardcoded!\n    try {\n      const locale = localStorage.getItem('kng2-locale') || navigator.language || navigator['userLanguage'] || 'fr';\n      const baseLocale = locale.split('-')[0];\n      return baseLocale;\n    } catch (e) {}\n    return 'fr';\n  }\n\n  /**\n   * Subscribe to the user stream.\n   */\n  // subscribe(\n  //   onNext, onThrow?: ((exception: any) => void)|null,\n  //   onReturn?: (() => void)|null) {\n  //     return this.config$.subscribe({next: onNext, error: onThrow, complete: onReturn});\n  // }\n\n}\n","//\n// useful statics methods \n\ninterface Date {\n  message:string;\n  daysInMonth(month: number): number;\n  monthDiff(d: Date): number;\n  daysDiff(d: Date): number;\n  hoursDiff(d: Date): number;\n  dayToDates(days: number[], limit?: number): Date[];\n  toYYYYMMDD(sep?): string;\n  tomorrow(): Date;\n  plusDays(nb: number): Date;\n  in(d1: Date, d2: Date): boolean;\n  equalsDate(d: Date): boolean;\n}\n\n//\n// FIXME extending Array cause issue with Angular 8 \n// interface Array<T> {\n//   sortSeparatedAlphaNum(separator?: string);\n//   sortAlphaNum();\n// }\n\n\n// Date\n// Month is 1 based\nDate.prototype.daysInMonth = function (month: number): number {\n  //var y=this.getFullYear(), m=(month||this.getMonth())\n  //return /8|3|5|10/.test(m)?30:m==1?(!(y%4)&&y%100)||!(y%400)?29:28:31;\n\n  return new Date(this.getFullYear(), (month || this.getMonth()) + 1, 0).getDate();\n};\n\n// the number of months between dates\n// http://stackoverflow.com/questions/2536379/difference-in-months-between-two-dates-in-javascript\nDate.prototype.monthDiff = function (d1: Date): number {\n  let months;\n  months = (d1.getFullYear() - this.getFullYear()) * 12;\n  months -= this.getMonth() + 1;\n  months += d1.getMonth();\n  return months <= 0 ? 0 : months;\n};\n\n\n// the number of days between dates\nDate.prototype.daysDiff = function (d1: Date|number): number {\n  const oneday = 86400000;\n  return Math.round((<number>d1 - <number>this)/oneday) ;\n};\n\n\n// the number of days between dates\nDate.prototype.hoursDiff = function (d1: Date|number): number {\n  const onehour = 3600000;\n  return Math.round((<number>d1 - <number>this)/onehour) ;\n};\n\n//\n// give an array of days (in the form [0..6]) and return the ordered dates corresponding (starting from new Date())\n// Sun(0), Mon, tuesday, wednesday, thursday, Freeday, Saterday\nDate.prototype.dayToDates = function (days?: number[], limit?: number): Date[] {\n  var now = this, today = now.getDay(), h24 = 86400000, week = 86400000 * 7, result: any[] = [], potential;\n  days = days || [];\n  days = days.sort(); // sort days in a week\n\n  //\n  // starting from today\n  days.forEach(function (day, i) {\n    if ((day - today) >= 0) {\n      result.push(new Date(now.getTime() + (day - today) * h24));\n    }\n  });\n\n  // this is splitted in 2 loops to make the list ordered!\n  // going to next week  ()\n  days.forEach(function (day) {\n    if ((day - today) < 0) {\n      potential = new Date(now.getTime() + (day - today) * h24 + week);\n      if (!limit || potential < limit) {\n        result.push(potential);\n      }\n    }\n  });\n\n  return result;\n};\n\nDate.prototype.toYYYYMMDD = function (sep?): string {\n  sep=sep||'';\n  const f_day = ((this.getDate()) + '').padStart(2, '0');\n  const f_month =  ((this.getMonth()+1)+'').padStart(2, '0');\n  return ''+this.getFullYear()+sep+f_month+sep+f_day;\n}\n\nDate.prototype.tomorrow = function (): Date {\n  return this.plusDays(1);\n}\n\nDate.prototype.plusDays = function (nb: number): Date {\n  var plus = new Date(this);\n  plus.setDate(this.getDate() + nb);\n  return plus;\n}\n\n//\n// simple test : this in [d1,d2[\nDate.prototype.in = function (d1: Date, d2: Date): boolean {\n  return (this >= d1 && this < d2)\n}\n\n//\n// simple equals day\nDate.prototype.equalsDate = function (d: Date): boolean {\n  // one day 86400000 ms // => (5⁵+4⁴+3³+2²+1)\n  // getTime()/86400000|0 \n  if(!d){\n    return false;\n  }\n  return this.getFullYear()==d.getFullYear()&&\n         this.getMonth()==d.getMonth()&&\n         this.getDate()==d.getDate();\n}\n  \n\n//\n// http://stackoverflow.com/questions/11887934/how-to-check-if-the-dst-daylight-saving-time-is-in-effect-and-if-it-is-whats\n// will tell you whether Daylight Savings Time is in effect.\n// Date.prototype.stdTimezoneOffset = function() {\n//     var jan = new Date(this.getFullYear(), 0, 1);\n//     var jul = new Date(this.getFullYear(), 6, 1);\n//     return Math.max(jan.getTimezoneOffset(), jul.getTimezoneOffset());\n// }\n\n// Date.prototype.dst = function() {\n//   return (this.getTimezoneOffset() < this.stdTimezoneOffset())?1:0;\n// }\n// Object.defineProperty(Array.prototype, \"stdTimezoneOffset\", { enumerable: false });\n// Object.defineProperty(Array.prototype, \"dst\", { enumerable: false });\n\n\n//\n// label alphanum sort for this case \"2000.10\"\n// Array.prototype.sortSeparatedAlphaNum = function (separator?: string) {\n//   separator = separator || '.';\n\n//   return this.sort(function (a, b) {\n//     var aA = a.split(separator);\n//     var bA = b.split(separator);\n//     // left part\n//     if (parseInt(aA[0]) > parseInt(bA[0])) {\n//       return 1;\n//     } else\n//       if (parseInt(aA[0]) < parseInt(bA[0])) {\n//         return -1;\n//       }\n//     //right part\n//     if (parseInt(aA[1]) > parseInt(bA[1])) {\n//       return 1;\n//     } else\n//       if (parseInt(aA[1]) < parseInt(bA[1])) {\n//         return -1;\n//       }\n//     return 0;\n//   });\n// };\n// Object.defineProperty(Array.prototype, \"sortSeparatedAlphaNum\", { enumerable: false });\n\n//\n// simple alpha num sorting\n// Array.prototype.sortAlphaNum = function () {\n//   var reA = /[^a-zA-Z]/g;\n//   var reN = /[^0-9]/g;\n//   return this.sort(function (a, b) {\n//     var aA = a.replace(reA, \"\");\n//     var bA = b.replace(reA, \"\");\n//     if (aA === bA) {\n//       var aN = parseInt(a.replace(reN, \"\"), 10);\n//       var bN = parseInt(b.replace(reN, \"\"), 10);\n//       return aN === bN ? 0 : aN > bN ? 1 : -1;\n//     } else {\n//       return aA > bA ? 1 : -1;\n//     }\n//   });\n// };\n\n//Object.defineProperty(Array.prototype, \"sortAlphaNum\", { enumerable: false });\n","import { Injectable } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { ConfigService } from './config.service';\nimport { Hub } from './hub.service';\nimport './es5';\nimport { User } from './user.service';\n\n/**\n * Interface complète pour gérer le timing des commandes produit\n * Centralise toute la logique de countdown, validation et formatage\n */\nexport interface ProductOrderTiming {\n  isOutOfTimeLimit: boolean;          // Trop tard pour commander\n  shouldShowCountdown: boolean;       // Afficher le countdown\n  hoursLeft: number;                  // Heures restantes (peut être négatif)\n  formattedTimeLeft: string;          // \"2 h 30 minutes\" ou \"45 minutes\"\n  formattedDeadline: string;          // \"14h30\" (heure de la deadline)\n}\n\n/**\n * # CalendarService - Gestion Centralisée des Dates de Livraison\n *\n * ## 🎯 RÔLE ET RESPONSABILITÉS\n *\n * Ce service centralise TOUTE la logique de calcul des dates de livraison.\n * Il est synchronisé avec l'API Calendar backend (calendar.js) testée.\n *\n * **Principe** : Logique pure de business rules, sans état utilisateur.\n * **Input** : Hub configuration + paramètres\n * **Output** : Dates calculées selon les règles métier\n *\n * ## 📋 USE CASES DÉTAILLÉS\n *\n * ### UC1 - Première Visite Utilisateur\n * **Contexte** : Nouvel utilisateur arrive sur le site\n * **Acteurs** : CartService.setContext() → CalendarService\n * **Flow** :\n * 1. ConfigService charge la config du hub\n * 2. CartService appelle CalendarService.nextShippingDay(hub)\n * 3. CalendarService calcule selon hub.weekdays + noshipping + timelimit\n * 4. CartService stocke le résultat comme cache.currentShippingDay\n *\n * ```typescript\n * // Dans CartService.setContext()\n * const nextShippingDay = this.$calendar.nextShippingDay(config.shared.hub);\n * this.cache.currentShippingDay = new Date(nextShippingDay);\n * ```\n *\n * ### UC2 - Commande en Cours (Pending Order)\n * **Contexte** : Utilisateur a une commande authorized/prepaid existante\n * **Acteurs** : CartService.setContext() détecte l'ordre pending\n * **Flow** :\n * 1. CartService trouve order avec status 'authorized'|'prepaid'\n * 2. Extrait order.shipping.when comme date de référence\n * 3. Vérifie via CalendarService.potentialShippingWeek() si toujours valide\n * 4. Si valide : utilise cette date, sinon calcule nextShippingDay()\n *\n * ```typescript\n * // Dans CartService.setContext()\n * if (!this.currentPendingOrder && order) {\n *   const day = new Date(order.shipping.when);\n *   const validDays = this.$calendar.potentialShippingWeek(config.shared.hub);\n *   if (validDays.some(d => d.equalsDate(day))) {\n *     this.cache.currentShippingDay = day; // ✅ Garde la date de l'ordre\n *   } else {\n *     this.cache.currentShippingDay = this.$calendar.nextShippingDay(config.shared.hub);\n *   }\n * }\n * ```\n *\n * ### UC3 - Changement de Date par l'Utilisateur\n * **Contexte** : Utilisateur sélectionne une nouvelle date dans le calendrier\n * **Acteurs** : Component → CartService.setShippingDay() → save()\n * **Flow** :\n * 1. Composant kng-calendar valide la date via CalendarService.isShippingDayAvailable()\n * 2. Si valide : appelle CartService.setShippingDay(newDate, hours)\n * 3. CartService met à jour cache.currentShippingDay + save() automatique\n * 4. Nouvelle préférence persistée côté serveur\n *\n * ```typescript\n * // Dans kng-calendar.component.ts\n * doSetCurrentShippingDay(day: Date) {\n *   if (this.$calendar.isShippingDayAvailable(this.currentHub, day)) {\n *     const hours = this.config.getDefaultTimeByDay(day);\n *     this.$cart.setShippingDay(day, hours); // => save() automatique\n *   }\n * }\n * ```\n *\n * ### UC4 - Validation Temps Restant (Product Page)\n * **Contexte** : Affichage du countdown avant fermeture des commandes\n * **Acteurs** : product.component.ts → CalendarService.timeleftBeforeCollect()\n * **Flow** :\n * 1. Composant récupère currentShippingDay depuis CartService\n * 2. Appelle CalendarService.timeleftBeforeCollect(hub, product.timelimit, shippingDay)\n * 3. CalendarService calcule : (collectTime - preparationHours) - now\n * 4. Composant affiche \"Il reste X heures pour commander\"\n *\n * ```typescript\n * // Dans product.component.ts\n * updateTimeLeft() {\n *   const shippingDay = this.$cart.getCurrentShippingDay();\n *   const timeLeft = this.$calendar.timeleftBeforeCollect(\n *     this.config.shared.hub,\n *     this.product.attributes.timelimit,\n *     shippingDay\n *   );\n *   this.hoursLeftBeforeOrder = timeLeft;\n * }\n * ```\n *\n * ### UC5 - Affichage Calendrier Semaine\n * **Contexte** : Composant kng-calendar affiche les jours disponibles\n * **Acteurs** : kng-calendar.component.ts → CalendarService.fullWeekShippingDays()\n * **Flow** :\n * 1. Composant appelle CalendarService.fullWeekShippingDays(hub)\n * 2. CalendarService calcule potentialShippingWeek() - noshipping dates\n * 3. Filtre selon uncapturedTimeLimit (6 jours par défaut)\n * 4. Composant affiche la liste des jours sélectionnables\n *\n * ```typescript\n * // Dans kng-calendar.component.ts\n * ngOnInit() {\n *   this.availableDays = this.$calendar.fullWeekShippingDays(this.currentHub);\n *   this.currentWeek = Array.from({length: 7})\n *     .map((id, idx) => (new Date(this.availableDays[0])).plusDays(idx));\n * }\n * ```\n *\n * ### UC6 - Multiple Commandes Même Date (Économie Shipping)\n * **Contexte** : Utilisateur a déjà une commande le même jour\n * **Acteurs** : CartService.hasShippingReductionMultipleOrder() + CalendarService\n * **Flow** :\n * 1. CartService détecte currentPendingOrder.shipping.when == currentShippingDay\n * 2. Vérifie si même adresse de livraison\n * 3. Si OUI : réduction shipping (économie pour le client)\n * 4. Interface affiche \"Livraison groupée - Économie réalisée\"\n *\n * ```typescript\n * // Dans CartService\n * hasShippingReductionMultipleOrder(address): boolean {\n *   if (this.currentPendingOrder?.shipping) {\n *     const whenDay = this.currentPendingOrder.shipping.when.getDate();\n *     const nextDay = this.cache.currentShippingDay?.getDate();\n *     const sameDay = (whenDay === nextDay);\n *     const sameAddress = UserAddress.isEqual(address, this.currentPendingOrder.shipping);\n *     return sameDay && sameAddress;\n *   }\n *   return false;\n * }\n * ```\n *\n * ### UC7 - Cross-Market Shipping (Multi-Hub)\n * **Contexte** : Produits de différents hubs dans le même panier\n * **Acteurs** : CartService.getShippingDayForMultipleHUBs() + CalendarService\n * **Flow** :\n * 1. CartService détecte items de hubs différents\n * 2. Calcule intersection des jours de livraison via CalendarService\n * 3. Si intersection vide : force séparation des commandes\n * 4. Si intersection OK : même date de livraison pour tous\n *\n * ```typescript\n * // Dans CartService\n * getShippingDayForMultipleHUBs() {\n *   const hubsDate = this.config.shared.hubs.map(hub =>\n *     this.$calendar.fullWeekShippingDays(hub)\n *   );\n *   // Intersection des jours disponibles\n *   return hubsDate[0].filter(date =>\n *     hubsDate[1].some(d2 => d2.equalsDate(date))\n *   );\n * }\n * ```\n *\n * ## 🔒 RÈGLES DE SÉPARATION DES RESPONSABILITÉS\n *\n * ### CalendarService (CE SERVICE) :\n * - ✅ Calculs purs des dates selon business rules\n * - ✅ Validation des jours disponibles\n * - ✅ Logique UTC avec correction timezone\n * - ✅ Synchronisation avec calendar.js backend\n * - ❌ PAS de gestion d'état utilisateur\n * - ❌ PAS de persistance\n * - ❌ PAS d'interface utilisateur\n *\n * ### CartService :\n * - ✅ Gestion de l'état currentShippingDay\n * - ✅ Persistance via save() automatique\n * - ✅ Détection des commandes pending\n * - ✅ Logique de réduction shipping\n * - ❌ PAS de calculs de dates business (délègue à CalendarService)\n *\n * ### Composants :\n * - ✅ Interface utilisateur et interactions\n * - ✅ Validation avant appels CartService\n * - ✅ Affichage des résultats CalendarService\n * - ❌ PAS de logique métier de dates\n * - ❌ PAS de gestion directe de l'état\n */\n\n@Injectable()\nexport class CalendarService {\n\n  constructor(\n    private $http: HttpClient,\n    private $config: ConfigService\n  ) {}\n\n  // === DÉPENDANCE AU CHARGEMENT CONFIG ===\n\n  /**\n   * Vérifier que ConfigService est chargé avant d'utiliser CalendarService\n   */\n  private ensureConfigLoaded(): boolean {\n    try {\n      if (!ConfigService.defaultConfig?.shared?.hub) {\n        return false;\n      }\n      return true;\n    } catch (error) {\n      console.error('CalendarService: erreur lors de la vérification config:', error);\n      return false;\n    }\n  }\n\n  /**\n   * Obtenir le hub par défaut depuis ConfigService\n   */\n  private getDefaultHub(): any {\n    if (!this.ensureConfigLoaded()) {\n      throw new Error('CalendarService nécessite ConfigService chargé');\n    }\n    return ConfigService.defaultConfig.shared.hub;\n  }\n\n  // === MÉTHODES SYNCHRONISÉES AVEC BACKEND TESTÉ ===\n\n  /**\n   * ✅ LOGIQUE EXACTE de calendar.js (testé)\n   *\n   * Calcule le prochain jour potentiel de livraison selon :\n   * - hub.timelimit : heures nécessaires de préparation\n   * - hub.timelimitH : heure limite de commande (ex: 16h)\n   *\n   * @param hub Hub optionnel, utilise le hub par défaut si non fourni\n   * @returns Date de livraison potentielle en timezone Hub\n   */\n  potentialShippingDay(hub?: Hub): Date {\n    const targetHub = hub || this.getDefaultHub();\n\n    // ✅ CORRECTION: HUB-CENTRIC comme le backend pour cohérence\n    const now = new Date();\n    const nowHub = this.toHubTime(now, targetHub); // ✅ Normaliser vers timezone Hub\n\n    const potentialHub = new Date(nowHub.getTime() + 3600000 * targetHub.timelimit);\n\n    // ✅ CORRECT: Compare timezone Hub vs timezone Hub (cohérent)\n    if (potentialHub.getHours() >= targetHub.timelimitH) {\n      potentialHub.setHours(targetHub.timelimitH, 0, 0, 0);\n      potentialHub.setDate(potentialHub.getDate() + 1);\n      return potentialHub;\n    }\n\n    potentialHub.setHours(16, 0, 0, 0);\n    return potentialHub;\n  }\n\n  /**\n   * @deprecated Use getValidShippingDatesForHub(...)[0] instead - first valid date\n   * ✅ DÉLÉGUER vers getValidShippingDatesForHub - fonction principale\n   */\n  nextShippingDay(hub?: any, user?: any): Date | null {\n\n    const targetHub = hub || this.getDefaultHub();\n    const validDates = this.getValidShippingDatesForHub(targetHub, {\n      days: targetHub.uncapturedTimeLimit || 6,\n      user: user,\n      currentRanks: ConfigService.defaultConfig?.shared?.currentRanks,\n      config: ConfigService.defaultConfig,\n      detailed: false\n    });\n\n    return validDates.length > 0 ? validDates[0] : null;\n  }\n\n  /**\n   * ✅ fonction utilitaire pour avoir la date pour les collaborateurs, vendeurs et la logistique\n   */\n  currentShippingDay(hub?: Hub): Date {    console.warn('currentShippingDay is deprecated, use getValidShippingDatesForHub with current week instead');\n\n    const targetHub = hub || this.getDefaultHub();\n    return this.dayToDates(targetHub.weekdays, undefined, undefined, targetHub)[0];\n  }\n\n  /**\n   * @deprecated Use getValidShippingDatesForHub with options instead\n   * Backward compatibility wrapper for fullWeekShippingDays\n   * ✅ SYNC AVEC BACKEND: fullWeekShippingDays est un wrapper deprecated\n   *\n   * @param hub Hub optionnel, utilise le hub par défaut si non fourni\n   * @param limit Limite en jours (défaut: hub.uncapturedTimeLimit || 6)\n   * @param user Utilisateur pour limites premium (optionnel)\n   * @returns Tableau des dates de livraison disponibles\n   */\n  fullWeekShippingDays(hub?: any, limit?: number, user?: any): Date[] {\n\n    const targetHub = hub || this.getDefaultHub();\n\n    // ✅ DÉLÉGUER vers getValidShippingDatesForHub comme dans le backend\n    return this.getValidShippingDatesForHub(targetHub, {\n      days: limit || targetHub.uncapturedTimeLimit || 6,\n      user: user,\n      currentRanks: ConfigService.defaultConfig?.shared?.currentRanks,\n      config: ConfigService.defaultConfig,\n      detailed: false\n    });\n  }\n\n  /**\n   * ✅ CALCUL DU TEMPS RESTANT AVANT DEADLINE DE COMMANDE AVEC INTERFACE COMPLÈTE\n   *\n   * **⚠️ FRONTEND HUB-CENTRIC vs BACKEND UTC-FIRST :**\n   * - **Frontend** : Travaille en timezone Hub (Europe/Zurich) pour cohérence utilisateur\n   * - **Backend** : Travaille en UTC pur avec conversions Hub seulement pour calculs business\n   *\n   * --- LOGIQUE MÉTIER CORRECTE ---\n   * 1. **`hub.timelimit`** = Heures de préparation nécessaires (ex: 24h)\n   * 2. **`hub.timelimitH`** = Heure de collecte quotidienne chez les vendeurs (ex: 16h Swiss)\n   * 3. **`product.attributes.timelimit`** = **HEURE LIMITE SPÉCIFIQUE** (remplace hub.timelimitH)\n   *\n   * --- EXEMPLE CONCRET ---\n   * Configuration hub :\n   * - `timelimit: 24` (24h de préparation nécessaire)\n   * - `timelimitH: 16` (collecte quotidienne à 16h Swiss)\n   *\n   * **Produit normal (MARDI livraison)** :\n   * - Collecte = MARDI 16h00 Swiss\n   * - Deadline = MARDI 16h00 - 24h = LUNDI 16h00 Swiss\n   *\n   * **Produit strict (pain frais avec `product.attributes.timelimit = 12`)** :\n   * - Collecte = MARDI 16h00 Swiss\n   * - **Limite produit** = LUNDI 16h00 → remplace par 12h00 → **LUNDI 12h00 Swiss**\n   * - Le vendeur impose une deadline plus restrictive (12h au lieu de 16h)\n   *\n   * @param hub Hub optionnel, utilise le hub par défaut si non fourni\n   * @param productTimelimit Heure limite spécifique pour ce produit (remplace hub.timelimitH si plus restrictif)\n   * @param when Date de livraison spécifique choisie par le client\n   * @param options Options { includeInterface?: boolean }\n   * @returns Temps restant (number) ou interface ProductOrderTiming si includeInterface=true\n   */\n  timeleftBeforeCollect(hub?: Hub, productTimelimit?: number, when?: Date, options: { includeInterface?: boolean } = {}): number | ProductOrderTiming {\n    const targetHub = hub || this.getDefaultHub();\n    const preparationHours = targetHub.timelimit;\n    const chosenShippingDate = when || this.potentialShippingDay(targetHub);\n\n    if (!chosenShippingDate) {\n      const errorResult = -1;\n      if (options.includeInterface) {\n        return {\n          isOutOfTimeLimit: true,\n          shouldShowCountdown: false,\n          hoursLeft: errorResult,\n          formattedTimeLeft: 'Indisponible',\n          formattedDeadline: 'N/A'\n        };\n      }\n      return errorResult;\n    }\n\n    // ✅ FRONTEND HUB-CENTRIC : Calculs dans timezone Hub pour cohérence\n    const collectDateTime = this.toHubTime(chosenShippingDate, targetHub);\n    collectDateTime.setHours(targetHub.timelimitH, 0, 0, 0); // Collecte normale\n\n    // ✅ LOGIQUE CORRECTE : product.attributes.timelimit remplace hub.timelimit (durée de préparation)\n    if (productTimelimit && productTimelimit > preparationHours) {\n      // ✅ EXEMPLE : Pain frais avec timelimit=24h au lieu de hub.timelimit=12h\n      // Hub normal: collecte demain 10h - préparation 12h = deadline aujourd'hui 22h\n      // Pain frais: collecte demain 10h - préparation 24h = deadline aujourd'hui 10h (plus restrictif!)\n\n      // ✅ CRITICAL FIX : Utiliser productTimelimit comme durée de préparation\n      const deadlineMs = collectDateTime.getTime() - (productTimelimit * 3600000);\n      const hoursLeft = (deadlineMs - Date.now()) / 3600000;\n\n      if (options.includeInterface) {\n        return this.buildProductOrderTimingInterface(hoursLeft, productTimelimit > 0);\n      }\n      return hoursLeft;\n    }\n\n    // Logique normale : collecte - préparation\n    const deadlineMs = collectDateTime.getTime() - (preparationHours * 3600000);\n    const cutoffDateTime = new Date(deadlineMs);\n    const hoursLeft = (cutoffDateTime.getTime() - Date.now()) / 3600000;\n\n    if (options.includeInterface) {\n      return this.buildProductOrderTimingInterface(hoursLeft, productTimelimit > 0);\n    }\n    return hoursLeft;\n  }\n\n  /**\n   * Use getValidShippingDatesForHub with potentialShippingDay instead\n   * ✅ DÉLÉGUER vers dayToDates - fonction utilitaire\n   */\n  potentialShippingWeek(hub?: Hub): Date[] {\n\n    const targetHub = hub || this.getDefaultHub();\n    const potential = this.potentialShippingDay(targetHub);\n\n    return this.dayToDates(targetHub.weekdays, potential, undefined, targetHub);\n  }\n\n  /**\n   * Vérifier si un jour spécifique est disponible pour la livraison\n   * ✅ OPTION LASTMINUTE : Ajoute validation heure limite\n   *\n   * @param hub Hub de livraison\n   * @param date Date à vérifier\n   * @param options { lastMinute?: boolean, now?: Date }\n   * @returns true si le jour est disponible\n   */\n  isShippingDayAvailable(hub: Hub, date: Date, options: { lastMinute?: boolean; now?: Date } = {}): boolean {\n    if (!hub || !date || isNaN(date.getTime())) {\n      return false;\n    }\n\n    const { lastMinute = false, now = new Date() } = options;\n\n    // Vérifier si le jour est dans les weekdays du hub\n    // ✅ FRONTEND HUB-CENTRIC: date est déjà en timezone Hub\n    if (hub.weekdays?.indexOf(date.getDay()) === -1) {\n      return false;\n    }\n\n    // Vérifier si la date n'est pas dans les périodes de fermeture\n    if (hub.noshipping?.length) {\n      for (const noshipping of hub.noshipping) {\n        if (date.in && date.in(noshipping.from, noshipping.to)) {\n          return false;\n        }\n      }\n    }\n\n    // ✅ VALIDATION LASTMINUTE : Vérifier heure limite\n    if (lastMinute) {\n      // Hub doit activer\n      if (!hub.acceptLastMinuteOrder || hub.acceptLastMinuteOrder <= 0) {\n        return false;\n      }\n\n      // Heure actuelle < limite\n      const nowHub = this.toHubTime(now, hub);\n      if (nowHub.getHours() >= hub.acceptLastMinuteOrder) {\n        return false;\n      }\n\n      // Date doit être aujourd'hui (utilise toYYYYMMDD)\n      if (date.toYYYYMMDD && now.toYYYYMMDD) {\n        if (date.toYYYYMMDD() !== now.toYYYYMMDD()) {\n          return false;\n        }\n      }\n    }\n\n    return true;\n  }\n\n  /**\n   * Mapper la semaine de livraison potentielle avec les raisons de fermeture\n   *\n   * @param hub Hub optionnel, utilise le hub par défaut si non fourni\n   * @returns Dates avec messages de fermeture si applicable\n   */\n  noShippingMessage(hub?: Hub): any[] {\n    const targetHub = hub || this.getDefaultHub();\n    return this.potentialShippingWeek(targetHub).map(shipping => {\n      const find = targetHub.noshipping?.find(noshipping => {\n        return shipping.in(noshipping.from, noshipping.to);\n      });\n      if (find) {\n        shipping.message = find.reason;\n      }\n      return shipping;\n    });\n  }\n\n  // === CONVERSIONS TIMEZONE (UTC ↔ HUB) ===\n\n  /**\n   * Obtenir le timezone du hub (défaut: Europe/Zurich)\n   *\n   * @param hub Hub optionnel\n   * @returns Timezone string (ex: 'Europe/Zurich')\n   */\n  getHubTimezone(hub?: any): string {\n    return hub?.timezone || 'Europe/Zurich';\n  }\n\n  /**\n   * Convertir UTC vers timezone du hub pour calculs business\n   * PRINCIPE: UTC normalisé → Hub timezone pour comparaisons → retour UTC\n   *\n   * @param utcDate Date en UTC\n   * @param hub Hub pour timezone (défaut: Europe/Zurich)\n   * @returns Date dans timezone du hub\n   */\n  toHubTime(utcDate: Date, hub?: any): Date {\n    if (!utcDate || isNaN(utcDate.getTime())) {\n      console.error('toHubTime: date invalide fournie:', utcDate);\n      return new Date(); // Fallback: maintenant\n    }\n\n    const timezone = this.getHubTimezone(hub);\n\n    // ✅ SOLUTION ROBUSTE : Utiliser convertToTimezone pour éviter bugs timezone client\n    // convertToTimezone retourne ISO avec offset que new Date() parse correctement partout\n    try {\n      const hubDateWithOffset = this.convertToTimezone(utcDate, timezone);\n      return new Date(hubDateWithOffset);\n    } catch (error) {\n      console.error('toHubTime: erreur conversion timezone:', error.message);\n      return new Date(utcDate); // Fallback: UTC inchangé\n    }\n  }\n\n  /**\n   * Convertir timezone hub vers UTC pour stockage\n   * PRINCIPE: Reconversion Hub → UTC pour normalisation\n   *\n   * @param hubDate Date dans timezone du hub\n   * @param hub Hub pour timezone (défaut: Europe/Zurich)\n   * @returns Date en UTC\n   */\n  toUTC(hubDate: Date, hub?: any): Date {\n    const timezone = this.getHubTimezone(hub);\n\n    // Interpréter hubDate comme étant dans le timezone du hub\n    // et la convertir vers UTC\n    const offsetMs = hubDate.getTimezoneOffset() * 60000;\n    return new Date(hubDate.getTime() - offsetMs);\n  }\n\n  // === VALIDATION ET UTILITÉS ===\n\n    /**\n   * Validation complète si un jour est disponible (availableDays + currentRanks + limites premium)\n   * Prend en compte les contraintes de capacité par jour et les privilèges premium\n   *\n   * @param day Date UTC à vérifier\n   * @param availableDays Liste des dates disponibles (timezone marché)\n   * @param options Options { user?: User, hub?: Hub } - utilise config.shared par défaut\n   * @returns true si le jour est disponible selon toutes les contraintes\n   */\n  isDayAvailable(day: Date, availableDays: Date[], options: { user?: User, hub?: Hub } = {}): boolean {\n    if (!day ||!availableDays) {\n      return false;\n    }\n\n    const { user, hub } = options;\n\n    // 1. Vérification de base: le jour doit être dans la liste disponible\n    // ✅ AMÉLIORATION: Si availableDays est vide [], on teste seulement currentRanks\n    if (availableDays.length > 0) {\n      let isInAvailableDays = false;\n      for (const date of availableDays) {\n        if (date.equalsDate && date.equalsDate(day)) {\n          isInAvailableDays = true;\n          break;\n        }\n        if (date.toDateString() === day.toDateString()) {\n          isInAvailableDays = true;\n          break;\n        }\n      }\n\n      if (!isInAvailableDays) {\n        return false;\n      }\n    }\n\n    // 2. Vérification currentRanks (contraintes de capacité) - Valeurs par défaut depuis config.shared\n    const config = ConfigService.defaultConfig?.shared;\n    if (!config) {\n      return true; // Si pas de config, accepter\n    }\n\n    const currentRanks = config.currentRanks;\n    if (currentRanks) {\n      const targetHub = hub || this.getDefaultHub();\n      const hubRanks = currentRanks[targetHub.slug] || {};\n\n      // Limite de base du hub\n      const currentLimit = targetHub.currentLimit || 1000;\n\n      // Limite premium supplémentaire si l'utilisateur est premium - depuis config.shared\n      const premiumLimit = (user && user.isPremium && user.isPremium()) ?\n        (config.order?.premiumLimit || 0) : 0;\n\n      const maxLimit = currentLimit + premiumLimit;\n\n      // Vérifier si le nombre de commandes pour ce jour dépasse la limite\n      // ✅ FRONTEND HUB-CENTRIC: day est déjà en timezone Hub, currentRanks indexé par jour Hub\n      const dayRank = hubRanks[day.getDay()] || 0;\n      if (dayRank > maxLimit) {\n        return false;\n      }\n    }\n\n    return true;\n  }\n\n  /**\n   * Validation simplifiée si un jour est dans la liste des jours disponibles (sans currentRanks)\n   * Utilisée quand availableDays contient déjà les contraintes filtrées\n   *\n   * @param day Date UTC à vérifier\n   * @param availableDays Liste des dates disponibles (timezone marché)\n   * @returns true si le jour est dans la liste disponible\n   */\n  isInAvailableDays(day: Date, availableDays: Date[]): boolean {\n    if (!day) {\n      return false;\n    }\n\n    // Validation simple: vérifier si le jour est dans la liste disponible\n    for (const date of availableDays) {\n      if (date.equalsDate && date.equalsDate(day)) {\n        return true;\n      }\n      if (date.toDateString() === day.toDateString()) {\n        return true;\n      }\n    }\n    return false;\n  }\n\n  /**\n   * Retourne l'heure par défaut selon jour (16h normalement, 12h samedi)\n   * day est en UTC, mais doit être comparé avec config hub Swiss\n   *\n   * @param day Date UTC\n   * @param hub Hub pour configuration timezone\n   * @returns Heure par défaut (ex: 16 pour 16h)\n   */\n  getDefaultTimeByDay(day: Date, hub?: Hub): number {\n    const targetHub = hub || this.getDefaultHub();\n    if (!targetHub) {\n      return 16;\n    }\n\n    // ✅ VALIDATION: Vérifier que day est valide\n    if (!day || isNaN(day.getTime())) {\n      return 16; // Fallback safe\n    }\n\n    // day est UTC, mais doit être comparé avec config hub Swiss\n    const dayHub = this.toHubTime(day, targetHub);\n\n    // Samedi Swiss = 12h, autres jours = 16h (ou config hub)\n    if (!targetHub.shippingtimes) {\n      return (dayHub.getDay() === 6) ? 12 : 16;\n    }\n    return targetHub.shippingtimes[dayHub.getDay()] || 16;\n  }\n\n  /**\n   * Vérifie si la commande last-minute est disponible (version simplifiée)\n   * ✅ SYNCHRONISÉ avec backend calendar.js\n   * Délègue à isShippingDayAvailable avec option lastMinute\n   *\n   * @param hub Hub optionnel\n   * @param options { now?: Date }\n   * @returns {{ available: boolean, when?: Date, hours?: number }}\n   */\n  isLastMinuteAvailable(hub?: Hub, options: { now?: Date } = {}): { available: boolean; when?: Date; hours?: number } {\n    const targetHub = hub || this.getDefaultHub();\n    const now = options.now || new Date();\n\n    // Normaliser date à midi UTC\n    const when = new Date(now);\n    when.setUTCHours(12, 0, 0, 0);\n\n    // ✅ Déléguer validation à isShippingDayAvailable\n    const available = this.isShippingDayAvailable(targetHub, when, { lastMinute: true, now });\n\n    if (!available) {\n      return { available: false };\n    }\n\n    // Retour simple\n    const hours = this.getDefaultTimeByDay(when, targetHub);\n    return { available: true, when, hours };\n  }\n\n  /**\n   * ✅ FONCTION PRINCIPALE: API flexible avec contraintes de capacité et règles business\n   * Synchronisée avec calendar.js backend (fonction source)\n   *\n   * @param hub Hub optionnel\n   * @param options Options: { days, user, currentRanks, config, detailed, limitToWeekdays }\n   * @returns Dates de livraison selon options et contraintes\n   */\n  getValidShippingDatesForHub(hub?: any, options: any = {}): Date[] | any[] {\n    const targetHub = hub || this.getDefaultHub();\n\n    if (!targetHub || !targetHub.weekdays) {\n      return [];\n    }\n\n    const {\n      days = (targetHub.uncapturedTimeLimit || 6),\n      user = null,\n      currentRanks = null,\n      config = null,\n      detailed = false,\n      limitToWeekdays = true  // ✅ COMPAT: Par défaut compatible avec ancienne logique\n    } = options;\n\n    // ✅ COMPAT: Handle null days like the old function\n    const effectiveDays = days;\n\n    const result = [];\n\n    // ✅ LOGIQUE CORRECTE: Utiliser la semaine de livraison depuis potentialShippingDay\n    const candidateDates = limitToWeekdays ?\n      this.potentialShippingWeek(targetHub) :  // TOUS les weekdays de la semaine de livraison\n      this.dayToDates(targetHub.weekdays, new Date(), new Date().plusDays(effectiveDays), targetHub);\n\n    // ✅ LOGIQUE CORRECTE: Pas de dateLimit arbitraire !\n    // Les dates de potentialShippingWeek sont déjà dans la fenêtre de livraison valide\n    // Seuls les filtres business (currentRanks, noshipping) s'appliquent\n    let validCandidates = candidateDates;\n\n    // Apply capacity constraints first (if provided) - EXACTEMENT comme backend\n    if (currentRanks && config) {\n      const hubRanks = currentRanks[targetHub.slug] || {};\n      const premiumLimit = (user && user.isPremium && user.isPremium()) ?\n        (config.shared?.order?.premiumLimit || 0) : 0;\n      const currentLimit = (targetHub.currentLimit || 1000) + premiumLimit;\n\n      validCandidates = validCandidates.filter(day => {\n        // ✅ FRONTEND HUB-CENTRIC: day est déjà en timezone Hub, currentRanks indexé par jour Hub\n        const dayRank = hubRanks[day.getDay()] || 0;\n        return dayRank < currentLimit;\n      });\n    }\n\n    // ✅ COMPAT: Gérer noshipping exactement comme backend\n    if (!targetHub.noshipping || !targetHub.noshipping.length) {\n      // No closed dates - return all valid candidates\n      if (detailed) {\n        return validCandidates.map(date => ({\n          utc: date.toISOString(),\n          swiss: this.formatForClient(date, targetHub),\n          day: date.getDay(), // ✅ FRONTEND HUB-CENTRIC: getDay() car date en timezone Hub\n          available: true,\n          reason: null\n        }));\n      }\n      return validCandidates.sort((a, b) => a.getTime() - b.getTime());\n    }\n\n    // ✅ COMPAT: there is closed dates - filter comme backend\n    validCandidates.forEach(shippingday => {\n      const find = targetHub.noshipping.find(noshipping => {\n        return shippingday.in && shippingday.in(noshipping.from, noshipping.to);\n      });\n      if (!find) {\n        if (detailed) {\n          result.push({\n            utc: shippingday.toISOString(),\n            swiss: this.formatForClient(shippingday, targetHub),\n            day: shippingday.getDay(), // ✅ FRONTEND HUB-CENTRIC: getDay() car date en timezone Hub\n            available: true,\n            reason: null\n          });\n        } else {\n          result.push(shippingday);\n        }\n      } else if (detailed) {\n        result.push({\n          utc: shippingday.toISOString(),\n          swiss: this.formatForClient(shippingday, targetHub),\n          day: shippingday.getDay(), // ✅ FRONTEND HUB-CENTRIC: getDay() car date en timezone Hub\n          available: false,\n          reason: find.reason || 'Période de fermeture'\n        });\n      }\n    });\n\n    // ✅ COMPAT: sorting dates comme backend\n    if (detailed) {\n      return result; // result contient des objets, pas besoin de sort\n    } else {\n      // result contient des dates, on peut les trier\n      const dateResults = result.filter(item => item instanceof Date);\n      return dateResults.sort((a, b) => a.getTime() - b.getTime());\n    }\n  }\n\n  // === FORMATAGE ET AFFICHAGE SWISS ===\n\n  /**\n   * ✅ SOLUTION INTERNATIONALE : Convertit un instant UTC vers ISO avec offset timezone\n   * Force le frontend à travailler dans le timezone du marché (Europe/Zurich)\n   *\n   * @param dateInput Date UTC ou string ISO\n   * @param timeZone Timezone IANA (défaut: Europe/Zurich)\n   * @param withMillis Inclure millisecondes (défaut: true)\n   * @returns String ISO avec offset (ex: \"2025-09-16T12:00:00.000+02:00\")\n   */\n  convertToTimezone(dateInput: string | number | Date, timeZone = 'Europe/Zurich', withMillis = true): string {\n    const date = new Date(dateInput);\n    if (isNaN(date.getTime())) throw new Error('Invalid dateInput');\n\n    // 1) Obtenir l'horloge locale du fuseau via Intl\n    const dtf = new Intl.DateTimeFormat('en-CA', {\n      timeZone,\n      year: 'numeric',\n      month: '2-digit',\n      day: '2-digit',\n      hour: '2-digit',\n      minute: '2-digit',\n      second: '2-digit',\n      hour12: false,\n    });\n\n    const parts = Object.fromEntries(\n      dtf.formatToParts(date).filter(p => p.type !== 'literal').map(p => [p.type, p.value])\n    );\n\n    const Y = +parts.year;\n    const M = +parts.month;\n    const D = +parts.day;\n    const H = +parts.hour;\n    const m = +parts.minute;\n    const s = +parts.second;\n    const ms = date.getUTCMilliseconds();\n\n    // 2) Recomposer cet \"horaire\" comme si c'était de l'UTC => calcule l'offset\n    const asUTC = Date.UTC(Y, M - 1, D, H, m, s, ms);\n    const offsetMs = asUTC - date.getTime(); // positif à l'est de l'UTC\n\n    const sign = offsetMs >= 0 ? '+' : '-';\n    const offAbs = Math.abs(offsetMs);\n    const offH = Math.floor(offAbs / 3_600_000);\n    const offM = Math.floor((offAbs % 3_600_000) / 60_000);\n\n    const pad2 = (n: number) => String(n).padStart(2, '0');\n    const pad3 = (n: number) => String(n).padStart(3, '0');\n\n    const timeCore = `${pad2(H)}:${pad2(m)}:${pad2(s)}${withMillis ? '.' + pad3(ms) : ''}`;\n    const offsetStr = `${sign}${pad2(offH)}:${pad2(offM)}`;\n\n    return `${Y}-${pad2(M)}-${pad2(D)}T${timeCore}${offsetStr}`;\n  }\n\n  /**\n   * ✅ STRATÉGIE HYBRIDE : Dates serveur + convertToTimezone frontend\n   * Utilise les dates calculées côté serveur et les convertit pour le timezone du marché\n   *\n   * @param hub Hub pour timezone\n   * @param options Options pour le serveur\n   * @returns Dates au format ISO avec offset timezone marché\n   */\n  getValidShippingDatesFromServer(hub?: any, options: any = {}): string[] {\n    // 1. Récupérer dates UTC du serveur (via API /v1/config shippingweek)\n    // 2. Convertir chaque date vers timezone marché avec offset\n    const targetHub = hub || this.getDefaultHub();\n    const timezone = this.getHubTimezone(targetHub);\n\n    // Cette méthode sera appelée avec les dates serveur\n    // Pour l'instant, déléguer vers l'ancienne méthode mais avec conversion timezone\n    const utcDates = this.getValidShippingDatesForHub(targetHub, options);\n\n    return utcDates.map(utcDate => this.convertToTimezone(utcDate, timezone));\n  }\n\n  /**\n   * Formate une date UTC pour affichage client dans timezone du hub\n   * La date reste UTC, seul l'affichage change\n   *\n   * @param utcDate Date en UTC\n   * @param hub Hub pour timezone (défaut: Europe/Zurich)\n   * @returns String formaté en timezone Swiss\n   */\n  formatForClient(utcDate: Date, hub?: any): string {\n    // ✅ PROTECTION : Vérifier que utcDate est une date valide\n    if (!utcDate || isNaN(utcDate.getTime())) {\n      utcDate = new Date(); // Fallback: maintenant\n    }\n\n    const timezone = this.getHubTimezone(hub);\n\n    try {\n      return new Intl.DateTimeFormat('fr-CH', {\n        timeZone: timezone,\n        weekday: 'long',\n        day: 'numeric',\n        month: 'long',\n        year: 'numeric'\n      }).format(utcDate); // utcDate reste UTC, seul le rendu change\n    } catch (error) {\n      // ✅ FALLBACK : Si Intl.DateTimeFormat échoue\n      console.error('formatForClient: erreur formatage:', error.message, 'date:', utcDate, 'timezone:', timezone);\n\n      // Fallback simple avec toLocaleDateString\n      try {\n        return utcDate.toLocaleDateString('fr-CH', {\n          weekday: 'long',\n          day: 'numeric',\n          month: 'long',\n          year: 'numeric'\n        });\n      } catch (fallbackError) {\n        // Ultimate fallback\n        return utcDate.toDateString();\n      }\n    }\n  }\n\n  // === TIMING PRODUIT (COUNTDOWN & VALIDATION) ===\n\n  /**\n   * Use timeleftBeforeCollect with { includeInterface: true } instead\n   * ✅ DÉLÉGUER vers timeleftBeforeCollect - fonction principale\n   */\n  getProductOrderTiming(product: any, hub?: Hub, options: any = {}): ProductOrderTiming {\n\n    const targetHub = hub || this.getDefaultHub();\n    const { when } = options;\n\n    return this.timeleftBeforeCollect(\n      targetHub,\n      product?.attributes?.timelimit,\n      when,\n      { includeInterface: true }\n    ) as ProductOrderTiming;\n  }\n\n  /**\n   * ✅ FONCTION UTILITAIRE : Construire l'interface ProductOrderTiming\n   * Utilisée par timeleftBeforeCollect (fonction principale)\n   */\n  private buildProductOrderTimingInterface(hoursLeft: number, hasProductLimit: boolean): ProductOrderTiming {\n    const isOutOfTimeLimit = hoursLeft < 0;\n    const shouldShowCountdown = hasProductLimit && hoursLeft > 0 && hoursLeft < 10;\n\n    return {\n      isOutOfTimeLimit,\n      shouldShowCountdown,\n      hoursLeft,\n      formattedTimeLeft: this.formatHoursAndMinutesLeft(hoursLeft),\n      formattedDeadline: this.formatDeadlineTime(hoursLeft)\n    };\n  }\n\n\n  /**\n   * Formate le temps restant en heures et minutes\n   *\n   * @param hoursLeft Heures restantes (peut être décimal)\n   * @returns String formaté \"2 h 30 minutes\" ou \"45 minutes\"\n   */\n  formatHoursAndMinutesLeft(hoursLeft: number): string {\n    const hours = Math.floor(Math.abs(hoursLeft));\n    const minutes = Math.floor((Math.abs(hoursLeft) - hours) * 60);\n\n    if (hours > 0) {\n      return `${hours} h ${minutes} minutes`;\n    }\n    return `${minutes} minutes`;\n  }\n\n  /**\n   * Formate l'heure de deadline (utilisé quand le délai est dépassé)\n   * Reconstruit l'heure exacte de la deadline à partir du temps restant négatif\n   *\n   * @param hoursLeft Heures restantes (négatif si deadline passée)\n   * @returns String formaté \"14h30\"\n   */\n  formatDeadlineTime(hoursLeft: number): string {\n    // Reconstituer l'heure exacte de deadline en ajoutant le temps restant (négatif) au moment actuel\n    const now = new Date();\n    const deadline = new Date(now.getTime() + hoursLeft * 3600000); // 3,600,000 ms = 1 heure\n\n    const deadlineHours = deadline.getHours();\n    const deadlineMinutes = deadline.getMinutes().toString().padStart(2, '0');\n\n    return `${deadlineHours}h${deadlineMinutes}`;\n  }\n\n\n  // === INTERNATIONALISATION (I18N) ===\n\n  /**\n   * Retourne le nom court d'un jour selon l'index et la langue\n   *\n   * @param idx Index du jour (0=dimanche, 6=samedi)\n   * @param lang Langue ('fr', 'de', 'en')\n   * @returns Nom court du jour (ex: 'lun.', 'mar.')\n   */\n  getWeekDay(idx: number, lang = 'fr'): string {\n    const weekdaysShort = this.i18n_weekdaysShort(lang);\n    return weekdaysShort[idx] || '';\n  }\n\n  /**\n   * Noms complets des jours de la semaine selon la langue\n   *\n   * @param lang Langue ('fr', 'de', 'en')\n   * @returns Array des noms complets ['dimanche', 'lundi', ...]\n   */\n  i18n_weekdays(lang = 'fr'): string[] {\n    const i18n = {\n      fr: ['dimanche', 'lundi', 'mardi', 'mercredi', 'jeudi', 'vendredi', 'samedi'],\n      en: ['sunday', 'monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday'],\n      de: ['sonntag', 'montag', 'dienstag', 'mittwoch', 'donnerstag', 'freitag', 'samstag']\n    };\n    return i18n[lang] || i18n.fr;\n  }\n\n  /**\n   * Noms courts des jours de la semaine selon la langue\n   *\n   * @param lang Langue ('fr', 'de', 'en')\n   * @returns Array des noms courts ['dim.', 'lun.', ...]\n   */\n  i18n_weekdaysShort(lang = 'fr'): string[] {\n    const i18n = {\n      fr: ['dim.', 'lun.', 'mar.', 'mer.', 'jeu.', 'ven.', 'sam.'],\n      en: ['sun.', 'mon.', 'tue.', 'wed.', 'thu.', 'fri.', 'sat.'],\n      de: ['so.', 'mo.', 'di.', 'mi.', 'do.', 'fr.', 'sa.']\n    };\n    return i18n[lang] || i18n.fr;\n  }\n\n  /**\n   * Noms des mois selon la langue\n   *\n   * @param lang Langue ('fr', 'de', 'en')\n   * @returns Array des noms des mois ['janvier', 'février', ...]\n   */\n  i18n_months(lang = 'fr'): string[] {\n    const i18n = {\n      fr: ['janvier', 'février', 'mars', 'avril', 'mai', 'juin', 'juillet', 'août', 'septembre', 'octobre', 'novembre', 'décembre'],\n      en: ['january', 'february', 'march', 'april', 'may', 'june', 'july', 'august', 'september', 'october', 'november', 'december'],\n      de: ['januar', 'februar', 'märz', 'april', 'mai', 'juni', 'juli', 'august', 'september', 'oktober', 'november', 'dezember']\n    };\n    return i18n[lang] || i18n.fr;\n  }\n\n  /**\n   * Noms des mois selon la langue (alias de i18n_months pour rétrocompatibilité)\n   */\n  weekdaysNames(lang = 'fr'): string[] {\n    return this.i18n_weekdays(lang);\n  }\n\n  /**\n   * Noms des mois selon la langue (alias de i18n_months pour rétrocompatibilité)\n   */\n  monthsNames(lang = 'fr'): string[] {\n    return this.i18n_months(lang);\n  }\n\n\n\n  // === MESSAGES NO-SHIPPING ===\n\n  /**\n   * Obtient le message de fermeture pour un jour donné\n   * Synchronisé avec la logique config.noShippingMessage()\n   *\n   * @param hub Hub pour les périodes de fermeture\n   * @param currentShippingDay Jour à vérifier\n   * @param locale Langue pour le message\n   * @returns Message de fermeture ou null\n   */\n  getNoShippingMessage(hub: any, currentShippingDay: Date, locale = 'fr'): string | null {\n    if (!hub?.noshipping?.length || !currentShippingDay) {\n      return null;\n    }\n\n    // Trouver la période de fermeture qui correspond au jour\n    const noshipping = hub.noshipping.find(shipping => {\n      if (!shipping.from || !shipping.to) return false;\n\n      // Vérifier si currentShippingDay tombe dans la période [from, to]\n      const from = new Date(shipping.from);\n      const to = new Date(shipping.to);\n\n      return currentShippingDay >= from && currentShippingDay <= to;\n    });\n\n    // Retourner le message dans la langue demandée\n    return noshipping?.message?.[locale] || null;\n  }\n\n  // === UTILITAIRES PRIVÉS ===\n\n  private formatDates(lst: Date[], limit?: Date): Date[] {\n    return lst\n      .sort((a, b) => a.getTime() - b.getTime())\n      .filter(date => !limit || date < limit);\n  }\n\n  private dayToDates(days: number[], offset?: Date, limit?: Date, hub?: any): Date[] {\n    // ✅ CORRECTION: HUB-CENTRIC pour cohérence avec hub.weekdays\n    const now = offset || new Date();\n    const targetHub = hub || this.getDefaultHub();\n    const nowHub = this.toHubTime(now, targetHub); // ✅ Normaliser vers timezone Hub\n\n    // ✅ CORRECT: Utiliser jour Hub pour comparer avec hub.weekdays (cohérent)\n    const today = nowHub.getDay(); // ✅ Jour Swiss pour comparaison avec hub.weekdays Swiss\n    const h24 = 86400000;\n    const week = 86400000 * 7;\n    const result: Date[] = [];\n\n    days = days?.sort() || [];\n\n    days.forEach(day => {\n      const diff = day - today;\n      if (diff >= 0) {\n        const resultDate = new Date(nowHub.getTime() + diff * h24); // ✅ Utilise nowHub\n        result.push(resultDate);\n      }\n    });\n\n    days.forEach(day => {\n      const diff = day - today;\n      if (diff < 0) {\n        const potential = new Date(nowHub.getTime() + diff * h24 + week); // ✅ Utilise nowHub\n        if (!limit || potential < limit) {\n          result.push(potential);\n        }\n      }\n    });\n\n    return result;\n  }\n}\n","import { HttpClient, HttpHeaders } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { ConfigService } from './config.service';\n\nimport { Observable ,  ReplaySubject ,  of ,  throwError as _throw } from 'rxjs';\nimport { map, tap } from 'rxjs/operators';\nimport { AnalyticsService } from './metrics.service';\nimport { configCors } from './config';\n\n\n@Injectable()\nexport class ProductService {\n\n    public product$: ReplaySubject<Product>;\n    private headers: HttpHeaders;\n    private config: any;\n    private cache = new Cache();\n\n    constructor(\n        private http: HttpClient\n    ) {\n        this.config = ConfigService.defaultConfig;\n        this.headers = new HttpHeaders({\n            'Content-Type': 'application/json',\n            'Cache-Control' : 'no-cache',\n            'Pragma' : 'no-cache',\n            'ngsw-bypass':'true',\n            'k-dbg': AnalyticsService.FBP\n        });\n\n        this.cache = new Cache();\n        //\n        // 1 means to keep the last value\n        this.product$ = new ReplaySubject(1);\n    }\n\n    private updateCache(product: Product) {\n        const incache = this.cache.map.get(product.sku);\n        if (!incache) {\n            this.cache.map.set(product.sku, new Product(product));\n            return this.cache.map.get(product.sku);\n        }\n\n        // clear date field to avoid type collusion\n\n        product.updated = new Date(product.updated||incache.updated);\n        product.created = new Date(product.created||incache.created);\n        return Object.assign(incache, product);\n    }\n\n    private deleteCache(sku: number) {\n        const incache = this.cache.map.get(sku);\n        if (incache) {\n            incache.deleted = true;\n            this.cache.map.delete(sku);\n        }\n        return incache;\n    }\n\n    cacheToList() {\n        return Array.from(this.cache.map.values());\n    }\n\n    dotNotation(product: Product) {\n        const notationObj = {};\n        function recurrent(obj, current?) {\n            for(var key in obj) {\n                var value = obj[key];\n                var newKey = (current ? current + \".\" + key : key);\n                if(value && typeof value === \"object\") {\n                recurrent(value, newKey);\n                } else {\n                    notationObj[newKey] = value;\n                }\n            }\n            return notationObj;\n        }\n        return recurrent(product);\n    }\n\n    autocomplete(text: string, params?: any): Observable<string[]> {\n      params = params || {};\n      params.q = text;\n      return this.http.get<string[]>(this.config.API_SERVER + '/v1/products/autocomplete', {\n          params,\n          headers: this.headers,\n          withCredentials: (configCors())\n      }).pipe(\n          map(suggest => suggest)\n      );\n    }\n\n    search(text: string, params?: any): Observable<Product[]> {\n        params = params || {};\n        params.q = text;\n        return this.http.get<Product[]>(this.config.API_SERVER + '/v1/products/search', {\n            params,\n            headers: this.headers,\n            withCredentials:true\n        }).pipe(\n            map(products => products)\n        );\n    }\n\n    select(params?: any): Observable<Product[]> {\n        params = params || {};\n        params.when\n\n        return this.http.get<Product[]>(this.config.API_SERVER + '/v1/products', {\n            params,\n            headers: this.headers,\n            withCredentials:true\n        }).pipe(\n            map(products => products.map(this.updateCache.bind(this)))\n        );\n    }\n\n    findByLocationCategoryAndDetail(category, detail): Observable<Product[]> {\n        return this.http.get<Product[]>(this.config.API_SERVER + '/v1/products/location/' + location + '/category/' + category + '/details/' + detail, {\n            headers: this.headers,\n            withCredentials:true\n        }).pipe(\n            map(products => products.map(this.updateCache.bind(this)))\n        );\n    }\n\n    findByCategoryAndDetail(category, detail): Observable<Product[]> {\n        return this.http.get<Product[]>(this.config.API_SERVER + '/v1/products/category/' + category + '/details/' + detail, {\n            headers: this.headers,\n            withCredentials:true\n        }).pipe(\n            map(products => products.map(this.updateCache.bind(this)))\n        );\n    }\n\n    findByLocationAndCategory(location, category): Observable<Product[]> {\n        return this.http.get<Product[]>(this.config.API_SERVER + '/v1/products/location/' + location + '/category/' + category, {\n            headers: this.headers,\n            withCredentials:true\n        }).pipe(\n            map(products => products.map(this.updateCache.bind(this)))\n        );\n    }\n\n    findLove(params?: any): Observable<Product[]> {\n        params = params || {};\n        return this.http.get<Product[]>(this.config.API_SERVER + '/v1/products/love', {\n            params,\n            headers: this.headers,\n            withCredentials:true\n        }).pipe(\n            map(products => products.map(this.updateCache.bind(this)))\n        );\n    }\n\n    findByDetails(details, params?: any): Observable<Product[]> {\n        return this.http.get<Product[]>(this.config.API_SERVER + '/v1/products/details/' + details, {\n            params,\n            headers: this.headers,\n            withCredentials:true\n        }).pipe(\n            map(products => products.map(this.updateCache.bind(this)))\n        );\n    }\n\n    findByAttribute(attribute, params?: any): Observable<Product[]> {\n        return this.http.get<Product[]>(this.config.API_SERVER + '/v1/products/attributes/' + attribute, {\n            params,\n            headers: this.headers,\n            withCredentials:true\n        }).pipe(\n            map(products => products.map(this.updateCache.bind(this)))\n        );\n    }\n\n    findByLocation(location): Observable<Product[]> {\n        return this.http.get<Product[]>(this.config.API_SERVER + '/v1/products/location/' + location, {\n            headers: this.headers,\n            withCredentials:true\n        }).pipe(\n            map(products => products.map(this.updateCache.bind(this)))\n        );\n    }\n\n    findByCategory(category: string, params?: any): Observable<Product[]> {\n        params = params || {};\n        return this.http.get<Product[]>(this.config.API_SERVER + '/v1/products/category/' + category, {\n            params,\n            headers: this.headers,\n            withCredentials:true\n        }).pipe(\n            map(products => products.map(this.updateCache.bind(this)))\n        );\n    }\n\n    findBySku(sku): Observable<Product> {\n        return this.get(sku);\n    }\n\n    //\n    // get product history based on its sku\n    history(sku): Observable<any> {\n        return this.http.get<Product>(this.config.API_SERVER + '/v1/products/history/' + sku, {\n            headers: this.headers,\n            withCredentials:true\n        });\n    }\n\n    //\n    // get product based on its sku\n    get(sku): Observable<Product> {\n        let cached: Observable<Product>;\n\n        // check if in the cache\n        if (this.cache.map.has(sku)) {\n            return of(this.cache.map.get(sku));\n        }\n        return this.http.get<Product>(this.config.API_SERVER + '/v1/products/' + sku, {\n            headers: this.headers,\n            withCredentials:true\n        }).pipe(\n            map(product => this.updateCache(product)),\n            tap(this.product$.next.bind(this.product$))\n        );\n    }\n\n    remove(sku: number, password: string): Observable<any> {\n      let passwordJson = {'password': password};\n      return this.http.put<Product>(this.config.API_SERVER + '/v1/products/' + sku, passwordJson, {\n        headers: this.headers,\n        withCredentials:true\n    }).pipe(\n        map(product => this.deleteCache(sku)),\n        tap(this.product$.next.bind(this.product$))\n      );\n    }\n\n    create(prod: Product, shopowner: string): Observable<Product> {\n        //\n        // FIXME creattion code is not correct\n        return this.http.post<Product>(this.config.API_SERVER + '/v1/shops/' + shopowner + '/products/', prod, {\n            headers: this.headers,\n            withCredentials:true\n        }).pipe(\n            map(product => this.updateCache(product)),\n            tap(this.product$.next.bind(this.product$))\n        );\n    }\n\n    save(prod: Product): Observable<Product> {\n        delete prod['__v'];\n        return this.http.post<Product>(this.config.API_SERVER + '/v1/products/' + prod.sku, prod, {\n            headers: this.headers,\n            withCredentials:true\n        }).pipe(\n            map(product => this.updateCache(product)),\n            tap(this.product$.next.bind(this.product$))\n        );\n    }\n\n    private handleError(error: Response | any) {\n        //\n        // In a real world app, you might use a remote logging infrastructure\n        let errMsg: string;\n        if (error instanceof Response) {\n            const body = error.json() || '';\n            const err = JSON.stringify(body);\n            errMsg = `${error.status} - ${error.statusText || ''} ${err}`;\n        } else {\n            errMsg = error.message ? error.message : error.toString();\n        }\n        return _throw(errMsg);\n    }\n}\n\nclass Cache {\n    list: Product[];\n    map: Map<number, Product>;\n    constructor() {\n        this.list = [];\n        this.map = new Map();\n    }\n}\n\n\nexport interface ProductPortion {\n  part:number;\n  unit:string;\n  offset:number;\n  isWeight:boolean;\n}\n\n\nexport class Product {\n\n    constructor(json?: any) {\n        const defaultProduct = {\n            attributes: {},\n            details: {},\n            photo: {},\n            recipes: [],\n            pricing: {},\n            categories: {},\n            shelflife: {},\n            vendor: {},\n            quantity: {},\n            bundle: [],\n            belong: {\n                weight: 0\n            },\n            stats: {\n                score: 0,\n                issues: 0,\n                sales: 0\n            }\n        };\n\n        Object.assign(this, defaultProduct, json || {});\n\n        if (this.updated) {\n            this.updated = new Date(this.updated);\n        }\n        if (this.created) {\n            this.created = new Date(this.created);\n        }\n    }\n    deleted: boolean;\n    title: string;\n    variants: any[];\n    sku: number;\n    slug: string;\n    updated: Date;\n    created: Date;\n    categories: any;\n    vendor: any;\n    bundle?:[{\n      title:string;\n      note:string;\n      vendor:string;\n      price:number;\n      active?:boolean;\n    }];\n    faq?: [{\n        q: string;\n        a: string;\n        updated: Date;\n    }];\n    recipes: string[];\n    photo: {\n        url: string;\n        colors: any[];\n    };\n    pricing: {\n        discount: number;\n        price: number;\n        part: string;\n        tva: number;\n        stock: number;\n    };\n    shelflife: {\n        display: boolean;\n        comment: string;\n    };\n    quantity: {\n        display: boolean;\n        comment: string;\n    };\n    attributes: {\n        lastMinute: boolean;\n        discount: boolean;\n        weight: number;\n        comment: boolean;\n        available: boolean;\n        home: boolean;\n        boost: boolean;\n        customized: boolean;\n        bundle: boolean;\n        subscription: boolean;\n        business:boolean;\n        timelimit: number;\n    };\n    details: {\n        keywords: string;\n        internal: string;\n        description: string;\n        origin: string;\n        biodegradable: boolean;\n        vegetarian: boolean;\n        bioconvertion: boolean;\n        biodynamics: boolean;\n        grta: boolean;\n        bio: boolean;\n        local: boolean;\n        nitrite: boolean;\n        natural: boolean;\n        homemade: boolean;\n        handmade: boolean;\n        gastronomy: boolean;\n        cold: boolean;\n        gluten: boolean;\n        lactose: boolean;\n        depositreturn: boolean;\n    };\n\n    //\n    // child category\n    belong: {\n        name: string;\n        weight: number;\n    };\n\n    //\n    // genetated values\n    stats: {\n        score: number;\n        sales: number;\n        issues: number;\n    };\n\n    hasFixedPortion() {\n        const weight = this.pricing.part || '';\n        let m = weight.match(/~([0-9.]+) ?(.+)/);\n        return(!m || m.length < 2);\n    }\n\n    getPortionParts(delta?:number):ProductPortion {\n      delta = delta||0.15; //                 ~   --part--    --unit--\n      let m = (this.pricing.part||'').match(/(~)?([0-9.,]+) ?([a-zA-Z]+)/);\n      if(!m) {\n        return {part:0,unit:'',offset:0,isWeight:false};\n      }\n      // [0]\n      // [1] => variant ?\n      // [2] => part\n      // [3] => unit\n      const part = parseFloat(m[2]);\n      const unit = (m[3]).toLowerCase();\n      const offset = (!m[1])? 0:this.round1cts(part * delta);\n      const isWeight = ['g','gr','k','kg','kilo'].indexOf(unit)>-1;\n      // 'portion entre ' + (part - offset) + unit + ' et ' + (part + offset) + '' + unit\n      return {part, unit, offset, isWeight};\n    }\n\n    round1cts(value: number) {\n    // round = round || 100; //centimes\n    //   if (value <= 5) {\n    //     return parseFloat(value.toFixed(1));\n    //   }\n    //   if (value <= 50) {\n    //     return Math.round(value);\n    //   }\n      return parseFloat((Math.round(value*100)/100).toFixed(2));\n    }\n\n\n\n    getPrice() {\n        if (this.attributes.discount && this.pricing.discount>=0) {\n        return this.pricing.discount;\n        }\n        return this.pricing.price;\n    }\n\n    isDiscount() {\n        return !!(this.attributes.discount && this.pricing.discount>=0);\n    }\n\n    isAvailableForOrder() {\n        const ok = (this.attributes.available &&\n                    this.vendor &&\n                    this.vendor.status === true);\n        return ok;\n    }\n}\n","import { HttpHeaders, HttpClient, HttpErrorResponse } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { ReplaySubject, SubscriptionLike as ISubscription, throwError as _throw, Observable, of, throwError, Subject } from 'rxjs';\n\nimport { config, Config, configCors } from './config';\nimport { Product } from './product.service';\nimport { Utils } from './util';\nimport { Order, OrderAddress } from './order/order';\nimport { Shop } from './shop.service';\nimport { User, UserAddress, UserCard, DepositAddress, ShippingAddress } from './user.service';\nimport { map, catchError, switchMap, debounceTime, tap } from 'rxjs/operators';\nimport { ConfigService } from './config.service';\nimport './es5';\nimport { AnalyticsService } from './metrics.service';\nimport { CalendarService } from './calendar.service';\n\n//\n// on cart action\nexport enum CartAction {\n  ITEM_ADD = \"ITEM_ADD\",\n  ITEM_UPDATE = \"ITEM_UPDATE\",\n  ITEM_REMOVE = \"ITEM_REMOVE\",\n  ITEM_MAX = \"ITEM_MAX\",\n  ITEM_ALL = \"ITEM_ALL\",\n  CART_INIT = \"CART_INIT\",\n  CART_LOADED = \"CART_LOADED\",\n  CART_LOAD_ERROR = \"CART_LOAD_ERROR\",\n  CART_SAVE_ERROR = \"CART_SAVE_ERROR\",\n  CART_ADDRESS = \"CART_ADDRESS\",\n  CART_PAYMENT = \"CART_PAYMENT\",\n  CART_SHIPPING = \"CART_SHIPPING\",\n  CART_CLEARED = \"CART_CLEARED\",\n  CART_SUBSCRIPTION = \"CART_SUBSCRIPTION\"\n}\n\n//\n// on cart change\nexport class CartState {\n  item?: CartItem;\n  order?: Order;\n  action: CartAction;\n  data?:any;\n  server?: CartItem[];\n}\n\n//\n// cart content\nexport class CartItem {\n\n  constructor(item: any | CartItem) {\n    // avoid UI artefact on loading\n    item['selected'] = undefined;\n    Object.assign(this, item);\n\n    item.active = (item.active =='true');\n    item.shared = (item.shared =='true');\n    item.bundle = (item.bundle =='true');\n    item.discount = (item.discount =='true');\n    item.frequency = item.frequency == 'false' ? undefined : item.frequency;\n    item.timestamp = new Date(item.timestamp);\n  }\n  shared?: boolean;\n  deleted?: boolean;\n  selected?: boolean;\n  bundle?: boolean|\"true\"|\"false\";\n  frequency?: CartItemFrequency|string|boolean; // subscription\n  active: boolean; // subscription\n  timestamp: Date;\n  timelimit?: number;\n  lastMinute?: boolean; // ✅ Flag produit lastMinute\n\n  displayName?: string;\n  email?: string;\n  hub: string;\n  title: string;\n  sku: number;\n  variant: string;\n  thumb: string;\n  price: number;\n  finalprice: number;\n  weight: number;\n  error?: string;\n  note?: string;\n  audio?: string;\n  category: {\n    slug: string;\n    name: string;\n  };\n  vendor: {\n    urlpath: string;\n    name: string;\n    weekdays: number[];\n    photo: string;\n    discount: {\n      threshold?: number;\n      amount?: number;\n    }\n  }\n  discount: boolean;\n  part: string;\n  quantity: number;\n  stockLimit?: number;\n\n  static fromContract(item:CartSubscriptionProductItem) {\n    return {\n      timestamp: (new Date()),\n      title: item.title,\n      sku: item.sku,\n      hub: item.hub,\n      variant: (item.variant),\n      price: item.fees,\n      quantity: item.quantity,\n      finalprice: item.fees*item.quantity,\n      active:true\n    } as CartItem;\n  }\n\n  static fromProduct(product: Product, hub: string, variant?: string, quantity?: number) {\n    product = (product instanceof Product)? product : new Product(product);\n    const item = {\n      timestamp: (new Date()),\n      title: product.title,\n      sku: product.sku,\n      hub: hub,\n      variant: (variant),\n      thumb: product.photo.url,\n      price: product.getPrice(),\n      timelimit: product.attributes.timelimit||0,\n      lastMinute: product.attributes.lastMinute||false, // ✅ Copier flag lastMinute\n      finalprice: product.getPrice(),\n      category: {\n        slug: product.categories.slug,\n        name: product.categories.name\n      },\n      vendor: {\n        urlpath: product.vendor.urlpath,\n        name: product.vendor.name,\n        /* FIXME vendor discount should be managed */\n        discount: { threshold: null, amount: 0 }\n      },\n      weight: product.categories.weight,\n      discount: product.isDiscount(),\n      part: product.pricing.part,\n      quantity: (quantity || 1),\n      stockLimit : product.pricing&&product.pricing.stock };\n    //\n    // init discount\n    // TODO howto manage discount link\n    if (product.vendor.discount &&\n        product.vendor.discount.active) {\n      item.vendor.discount.threshold = parseFloat(product.vendor.discount.threshold);\n      item.vendor.discount.amount = parseFloat(product.vendor.discount.amount);\n    }\n    return new CartItem(item);\n  }\n\n  equalItem(other: CartItem, variant?: string) {\n    const bSku = (\n      this.sku == other.sku &&\n      this.hub == other.hub &&\n      this.frequency == other.frequency &&\n      !this.active\n    );\n    if (!variant) {\n      return bSku;\n    }\n    return (this.variant &&\n      this.variant == variant &&\n      bSku);\n  }\n\n  //\n  // FIXME server need this format, that should be modified\n  toDEPRECATED() {\n    return {\n      sku: this.sku,\n      title: this.title,\n      variant: this.variant,\n      frequency: this.frequency,\n      timelimit: this.timelimit||0,\n      categories: this.category.name,\n      vendor: this.vendor.urlpath,\n      quantity: this.quantity,\n      price: this.price,\n      hub: this.hub,\n      part: this.part,\n      note: this.note,\n      audio: this.audio,\n      finalprice: this.finalprice\n    };\n  }\n}\n\n//\n// get a list of Items in regard of the context\n// - forSubscription ==> item with frequency\n// - onSubscription ==> item with active subscription (default none)\n// - lastMinute ==> filter only lastMinute items\n//\nexport interface CartItemsContext {\n  address?:DepositAddress | UserAddress,\n  forSubscription?:boolean| undefined,\n  onSubscription?:boolean,\n  lastMinute?:boolean,\n  hub?: string\n}\n\n//\n// subscription context\nexport interface CartSubscriptionProductItem{\n  unit_amount: number,\n  currency:string,\n  quantity:number,\n  fees:number,\n  sku:number|string,\n  title:string,\n  note: string,\n  hub: string,\n  part: string,\n  variant?:string,\n  error?:string,\n  deleted?: boolean,\n  audio?: string,\n  selected?: boolean,\n  updated?: boolean\n}\n\nexport interface CartSubscriptionServiceItem{\n  unit_amount:number,\n  quantity:number,\n  fees:number,\n  id:string,\n  title?:string\n}\n\n\nexport enum CartSchedulerStatus {\n  active = \"active\",\n  paused=\"paused\",\n  pending=\"pending\",\n  incomplete=\"incomplete\",\n  trialing=\"trialing\",\n  cancel=\"cancel\"\n}\nexport enum CartItemFrequency {\n  ITEM_NONE      = 0,\n  ITEM_DAY       = \"day\",\n  ITEM_WEEK      = \"week\",\n  ITEM_2WEEKS    = \"2weeks\",\n  ITEM_MONTH     = \"month\"\n}\nexport interface CartSubscription {\n  id: string,\n  plan:string,\n  customer: string,\n  paymentId: string;\n  paymentAlias: string;\n  description: string,\n  start:Date,\n  nextInvoice:Date,\n  pauseUntil: Date|0,\n  frequency:CartItemFrequency,\n  dayOfWeek:number,\n  status:string,\n  issue?:string,\n  latestPaymentIntent:{\n    source:string,\n    status:string,\n    id:string,\n    client_secret:string\n  },\n  shipping: ShippingAddress| DepositAddress | UserAddress,\n  items: CartSubscriptionProductItem[],\n  services: CartSubscriptionServiceItem[],\n  patreon: CartSubscriptionServiceItem[],\n\n  errors?:any\n};\n\nexport interface CartSubscriptionParams{\n  time?:number,\n  dayOfWeek:number,\n  frequency: CartItemFrequency|string,\n  activeForm:boolean;\n}\n\nexport interface CartSubscriptionData{\n  dayOfWeek:number,\n  frequency: CartItemFrequency|string,\n  items:any[],\n  shipping:DepositAddress | UserAddress,\n  payment:string,\n  hub:string\n}\n\n//\n// DEPRECATED: user config.shared instead\nexport class CartConfig {\n  namespace: string;\n  gateway: {\n    fees: number,\n    label: string\n  };\n  currency: string;\n  shipping: any | {\n    average: number;\n    price: {\n      hypercenter: number;\n      periphery: number;\n      others: number;\n    }\n    //\n    // discount amount\n    priceA: number;\n    priceB: number;\n    //\n    // discount threshold\n    discountA: number;    // half price 5.4@18% & 4.5@15%\n    discountB: number;    // 180 full price 11.7@18% & 9.75@15%\n\n    //\n    // postalCodes\n    periphery: string[];\n    others: string[];\n  };\n\n  constructor() {\n    const defaultShipping = {\n      // average\n      average: 0,\n      price: {},\n      priceA: 0,\n      priceB: 0,\n      discountA: 0,    // half price 5.4@18% & 4.5@15%\n      discountB: 0,    // 180 full price 11.7@18% & 9.75@15%\n      periphery: [],\n      others: [],\n      collect: []\n    };\n    this.namespace = 'kng2-cart';\n    this.currency = 'CHF';\n    this.shipping = {};\n    this.gateway = { fees: 0, label: 'Aucun' };\n    Object.assign(this.shipping, defaultShipping);\n  }\n\n}\n\n//\n// server content\nexport class CartModel {\n  cid: string | [string];\n  items: CartItem[];\n  updated: Date;\n  reset: Date;\n  subscriptionParams: CartSubscriptionParams;\n  subscriptions: string[];\n  constructor() {\n    this.items = [];\n    // frequency is 1 or 3\n    // dayOfWeek is 2,3, 5\n    this.subscriptions = [];\n    this.subscriptionParams = {\n      dayOfWeek:2,\n      time:16,\n      frequency: \"week\",\n      activeForm: false,\n    }\n  }\n}\n\n//\n// Cart Cache content\n// which is used over time (close/open navigator)\n// this should be serialized in server side\nclass CartContext extends CartModel {\n\n  //\n  // vendors discounts\n  // TODO vendors discount should feet actual vendors settings\n  address: DepositAddress | UserAddress;\n  payment: UserCard;\n  currentShippingDay: Date;\n  currentShippingTime: number;\n  currentShippingLastMinute?: boolean;\n  subscriptionsContent: CartSubscription[];\n  shared?: CartModel;\n  uuid?: string;\n  name?: string;\n  loaded: boolean;\n  constructor() {\n    super();\n    this.address = new DepositAddress({});\n    this.payment = new UserCard();\n    // ✅ FIXED: lastMinute TOUJOURS false par défaut\n    this.currentShippingLastMinute = false;\n  }\n}\n\n\n@Injectable()\nexport class CartService {\n\n  private isReady: boolean;\n  private headers: HttpHeaders;\n\n  private currentHub: string;\n  private currentUser: User;\n  private currentShops: Shop[] = [];\n  private currentPendingOrder: Order;\n  private vendorAmount: any;\n  private itemsQtyMap: any;\n  private itemsSubsMap: any;\n\n\n  private defaultConfig: Config = config;\n\n\n  //\n  // initial cart configuration\n  private cartConfig: CartConfig = new CartConfig();\n\n  private cache:CartContext;\n\n  private load$: Subject<string>;\n\n\n  public SHIPPING_COLLECT = 'collect';\n  public SHIPPING_CENTER = 'hypercenter';\n  public SHIPPING_PERIPHERY = 'periphery';\n  public SHIPPING_OTHER = 'other';\n\n  public DEFAULT_GATEWAY: any;\n  public cart$: ReplaySubject<CartState>;\n  public subscription$: ReplaySubject<CartSubscription[]>;\n\n  constructor(\n    private $http: HttpClient,\n    private $calendar: CalendarService\n  ) {\n    this.headers = new HttpHeaders({\n      'Content-Type': 'application/json',\n      'Cache-Control' : 'no-cache',\n      'Pragma' : 'no-cache',\n      'ngsw-bypass':'true',\n      'k-dbg': AnalyticsService.FBP\n    });\n    this.cache = new CartContext();\n    this.currentUser = new User();\n    this.DEFAULT_GATEWAY = this.cartConfig.gateway;\n    //\n    // 1 means to keep the last value\n    this.cart$ = new ReplaySubject(1);\n    this.subscription$ = new ReplaySubject(1);\n    this.load$ = new Subject();\n    this.isReady = false;\n    this.vendorAmount = {};\n    this.itemsQtyMap = {};\n    this.itemsSubsMap = {};\n\n    this.load$.asObservable().pipe(debounceTime(300)).subscribe((cached)=> {\n      this.internalLoad(cached);\n    })\n\n    // this.cart$.next({action:CartAction.CART_INIT});\n  }\n\n\n  subscriptionsGetAll(): Observable<CartSubscription[]> {\n    return this.$http.get<CartSubscription[]>(this.defaultConfig.API_SERVER + '/v1/cart/subscriptions', {\n      headers: this.headers,\n      withCredentials: (configCors())\n    })\n  }\n\n  subscriptionsGet(): Observable<CartSubscription[]> {\n    return this.$http.get<CartSubscription[]>(this.defaultConfig.API_SERVER + '/v1/cart/subscription', {\n      headers: this.headers,\n      withCredentials: (configCors())\n    }).pipe(\n      catchError((err:HttpErrorResponse) => {\n        if(err.status == 401){\n          return of([]);\n        }\n        return throwError(err)\n      }),\n      tap(subscriptions=> {\n        //\n        // server subscription values\n        this.cache.subscriptionsContent = subscriptions || [];\n        this.subscription$.next(subscriptions);\n        return subscriptions;\n      })\n    )\n  }\n\n  subscriptionPause(subscription:CartSubscription, to:Date): Observable<CartSubscription> {\n    return this.$http.post<CartSubscription>(this.defaultConfig.API_SERVER + `/v1/cart/subscription/${subscription.id}/pause`, {to}, {\n      headers: this.headers,\n      withCredentials: (configCors())\n    }).pipe(\n      tap(subscription=> {\n        //\n        // server subscription values\n        this.cache.subscriptionsContent = this.cache.subscriptionsContent || [];\n        const indexSub = this.cache.subscriptionsContent.findIndex(sub => sub.id == subscription.id);\n        Object.assign(this.cache.subscriptionsContent[indexSub], subscription);\n        this.subscription$.next(this.cache.subscriptionsContent);\n        return subscription;\n      })\n    )\n  }\n\n  subscriptionResume(subscription:CartSubscription): Observable<CartSubscription> {\n    return this.$http.post<CartSubscription>(this.defaultConfig.API_SERVER + `/v1/cart/subscription/${subscription.id}/resume`, {}, {\n      headers: this.headers,\n      withCredentials: (configCors())\n    }).pipe(\n      tap(subscription=> {\n        //\n        // server subscription values\n        this.cache.subscriptionsContent = this.cache.subscriptionsContent || [];\n        const indexSub = this.cache.subscriptionsContent.findIndex(sub => sub.id == subscription.id);\n        Object.assign(this.cache.subscriptionsContent[indexSub], subscription);\n        this.subscription$.next(this.cache.subscriptionsContent);\n        return subscription;\n      })\n    )\n  }\n\n  /**\n   * Réinitialise le cycle de facturation (Admin only)\n   * \n   * @param subscription - L'abonnement à modifier\n   * @param toDate - 'now' pour immédiat, ou une Date future (utilise trial_end) - REQUIRED\n   * \n   * COMPORTEMENT STRIPE (trial_end pour date future) :\n   * > \"Adding a trial → Stripe sets the anchor date to the end of the trial\"\n   * \n   * @see https://stripe.com/docs/billing/subscriptions/billing-cycle#changing\n   */\n  subscriptionResetBillingCycle(subscription: CartSubscription, toDate: Date | 'now'): Observable<CartSubscription> {\n    const body = {\n      toDate: toDate === 'now' ? 'now' : toDate.toISOString()\n    };\n    \n    return this.$http.post<CartSubscription>(this.defaultConfig.API_SERVER + `/v1/cart/subscription/${subscription.id}/reset-billing`, body, {\n      headers: this.headers,\n      withCredentials: (configCors())\n    }).pipe(\n      tap(subscription=> {\n        //\n        // server subscription values\n        this.cache.subscriptionsContent = this.cache.subscriptionsContent || [];\n        const indexSub = this.cache.subscriptionsContent.findIndex(sub => sub.id == subscription.id);\n        if (indexSub >= 0) {\n          Object.assign(this.cache.subscriptionsContent[indexSub], subscription);\n        }\n        this.subscription$.next(this.cache.subscriptionsContent);\n        return subscription;\n      })\n    )\n  }\n\n  subscriptionCancel(subscription:CartSubscription): Observable<CartSubscription> {\n    return this.$http.post<CartSubscription>(this.defaultConfig.API_SERVER + `/v1/cart/subscription/${subscription.id}/cancel`, {}, {\n      headers: this.headers,\n      withCredentials: (configCors())\n    }).pipe(\n      tap(subscription=> {\n        //\n        // server subscription values\n        this.cache.subscriptionsContent = this.cache.subscriptionsContent || [];\n        const indexSub = this.cache.subscriptionsContent.findIndex(sub => sub.id == subscription.id);\n        this.cache.subscriptionsContent.splice(indexSub, 1);\n        this.subscription$.next(this.cache.subscriptionsContent);\n        return subscription;\n      })\n    )\n  }\n\n  // body = {account, frequency, token, payment, product}\n  subscriptionCreatePatreon(options) {\n    return this.$http.post<CartSubscription>(this.defaultConfig.API_SERVER + '/v1/cart/patreon', options, {\n      headers: this.headers,\n      withCredentials: (configCors())\n    }).pipe(\n      tap(subscription=> {\n        if(subscription.errors){\n          return subscription;\n        }\n        //\n        // server subscription values\n        this.cache.subscriptionsContent = this.cache.subscriptionsContent || [];\n        this.cache.subscriptionsContent.push(subscription)\n        this.subscription$.next(this.cache.subscriptionsContent);\n        return subscription;\n      })\n    )\n\n  }\n\n\n  subscriptionCreate(params:CartSubscriptionData): Observable<CartSubscription> {\n    //const {shipping, items, payment,frequency, dayOfWeek } = params;\n    return this.$http.post<CartSubscription>(this.defaultConfig.API_SERVER + '/v1/cart/subscription', params, {\n      headers: this.headers,\n      withCredentials: (configCors())\n    }).pipe(\n      tap(subscription=> {\n        if(subscription.errors){\n          return subscription;\n        }\n        //\n        // server subscription values\n        this.cache.subscriptionsContent = this.cache.subscriptionsContent || [];\n        this.cache.subscriptionsContent.push(subscription)\n        this.subscription$.next(this.cache.subscriptionsContent);\n        return subscription;\n      })\n    )\n  }\n\n  subscriptionUpdate(sid,params:CartSubscriptionData): Observable<CartSubscription>{\n    return this.$http.post<CartSubscription>(this.defaultConfig.API_SERVER + '/v1/cart/subscription/'+sid+'/update', params, {\n      headers: this.headers,\n      withCredentials: (configCors())\n    }).pipe(\n      tap(subscription=> {\n        if(subscription.errors){\n          return subscription;\n        }\n        //\n        // server subscription values\n        this.cache.subscriptionsContent = this.cache.subscriptionsContent || [];\n        const indexSub = this.cache.subscriptionsContent.findIndex(sub => sub.id == subscription.id);\n        Object.assign(this.cache.subscriptionsContent[indexSub], subscription);\n        this.subscription$.next(this.cache.subscriptionsContent);\n        return subscription;\n      })\n    )\n\n  }\n\n  subscriptionUpdatePayment(hub,sid,payment): Observable<CartSubscription>{\n    return this.$http.post<CartSubscription>(this.defaultConfig.API_SERVER + '/v1/cart/subscription/'+sid+'/payment', {payment,hub}, {\n      headers: this.headers,\n      withCredentials: (configCors())\n    }).pipe(\n      tap(subscription=> {\n        //\n        // server subscription values\n        const indexSub = this.cache.subscriptionsContent.findIndex(sub => sub.id == subscription.id);\n        Object.assign(this.cache.subscriptionsContent[indexSub], subscription);\n        this.subscription$.next(this.cache.subscriptionsContent);\n        return subscription;\n      })\n    )\n  }\n\n  subscriptionPaymentConfirm(sid,intent): Observable<CartSubscription>{\n    return this.$http.post<CartSubscription>(this.defaultConfig.API_SERVER + '/v1/cart/subscription/'+sid+'/confirm', { intent }, {\n      headers: this.headers,\n      withCredentials: (configCors())\n    }).pipe(\n      tap(subscription=> {\n        //\n        // server subscription values\n        const indexSub = this.cache.subscriptionsContent.findIndex(sub => sub.id == subscription.id);\n        Object.assign(this.cache.subscriptionsContent[indexSub], subscription);\n        this.subscription$.next(this.cache.subscriptionsContent);\n        return subscription;\n      })\n    )\n  }\n\n\n  subscriptionGetPatreonProducts(): Observable<any> {\n    return this.$http.get<any>(this.defaultConfig.API_SERVER + '/v1/cart/patreon', {\n      headers: this.headers,\n      withCredentials: (configCors())\n    });\n  }\n\n\n\n  subscriptionSetParams(params:CartSubscriptionParams, quiet?:boolean) {\n    if(params.time>0) {\n      this.cache.currentShippingTime=params.time;\n    }\n    this.cache.subscriptionParams = params;\n    const data = {\n      currentShippingTime:this.cache.currentShippingTime\n    }\n\n    if(!quiet) {\n      this.save({ action: CartAction.CART_SUBSCRIPTION, data });\n    }\n  }\n\n  subscriptionGetParams():CartSubscriptionParams {\n    return this.cache.subscriptionParams;\n  }\n\n  //\n  // API\n  //\n\n\n  //\n  // add multiples items\n  addAll(products: Product[] | CartItem[]) {\n    if(!products || !products.length) {\n      return;\n    }\n    products.forEach(item => this.add(item, item.variant, true));\n    this.save({ action: CartAction.ITEM_ALL });\n  }\n\n  //\n  // update note if item is available\n  addOrUpdateNote(item: CartItem, variant?: string){\n    const items = this.cache.items;\n    const index = items.findIndex(elem => elem.sku == item.sku && elem.hub == item.hub);\n    if (index>-1){\n      items[index].note =  item.note || items[index].note;\n      items[index].audio = item.audio || items[index].audio;\n      this.save({ item: items[index], action: CartAction.ITEM_UPDATE });\n      return;\n    }\n    this.add(item,variant);\n  }\n\n  //\n  // add one item\n  add(product: Product | CartItem, variant?: string, quiet?: boolean) {\n    // if(window.fbq)fbq('track', 'AddToCart');\n    this.checkIfReady();\n    const items = this.cache.items;\n    const item = (product instanceof CartItem) ? product : CartItem.fromProduct(product, this.currentHub, variant);\n\n    // console.log('--- ADD ITEM',item.sku,item.hub);\n\n    for (let i = 0; i < items.length; i++) {\n      if (items[i].equalItem(item, variant)) {\n\n        //\n        // check availability\n        // TODO products should be cached in Cart.cache.products[] to sync vendor/discount and quantity\n        if (item.stockLimit>0 && item.stockLimit <= items[i].quantity) {\n          if (quiet) {\n            return;\n          }\n          this.cart$.next({ item: items[i], action: CartAction.ITEM_MAX });\n          return;\n        }\n\n        //\n        // item already in active Subscription, return max error\n        if(this.getSubsQtyMap(item.sku)) {\n          if (quiet) {\n            return;\n          }\n          this.cart$.next({ item: items[i], action: CartAction.ITEM_MAX });\n          return;\n\n        }\n\n        //\n        //  fast cart load\n        if (items[i].quantity > 6) {\n          items[i].quantity += 2;\n        } else {\n          items[i].quantity++;\n        }\n        //\n        // update the finalprice and vendor\n        items[i].finalprice = items[i].price * items[i].quantity;\n        items[i].vendor = item.vendor;\n        items[i].note =  items[i].note || item.note;\n        items[i].audio = items[i].audio || item.audio;\n\n        // TODO warn update\n        this.computeVendorDiscount();\n        this.computeItemsQtyMap();\n\n        if (quiet) {\n          return;\n        }\n        this.save({ item: items[i], action: CartAction.ITEM_ADD });\n        return;\n      }\n    }\n\n\n    items.push(item);\n    // TODO warn update\n    this.computeVendorDiscount();\n    this.computeItemsQtyMap();\n\n    if (quiet) {\n      return;\n    }\n\n    return this.save({ item, action: CartAction.ITEM_ADD });\n  }\n\n  // clear error\n  clearErrors() {\n    this.cache.items.forEach(item => item.error = undefined);\n  }\n\n  //\n  // FIXME, it should be done by the server\n  clearAfterOrder(hub:string, order?:Order,contract?:CartSubscription) {\n    //\n    // protect active items from subscriptions\n    if(order){\n      this.cache.items = this.cache.items.filter(item => item.hub != hub && !item.frequency);\n    }\n\n    //\n    // protect active items from subscriptions\n    if(contract) {\n      this.cache.items = this.cache.items.filter(item => item.hub != hub && !item.frequency && !item.frequency);\n    }\n    if(order && order.oid) {\n      this.currentPendingOrder = order || this.currentPendingOrder;\n    }\n    this.save({ action: CartAction.CART_CLEARED, order });\n  }\n\n  broadcastState() {\n    this.save({ action: CartAction.CART_CLEARED });\n  }\n\n  //\n  // cart initialisation valid\n  checkIfReady() {\n    if (!this.isReady) { throw new Error('Cart is used before initialisation'); }\n  }\n\n  //\n  computeItemsQtyMap(){\n    this.itemsQtyMap = {};\n    this.cache.items.filter(item => !item.active).forEach(item => {\n      const sku = item.sku + item.hub + (!!item.frequency);\n      this.itemsQtyMap[sku] = item.quantity;\n    });\n  }\n\n  computeSubsQtyMap(items: CartItem[]){\n    this.itemsSubsMap = {};\n    items.forEach(item => {\n      const sku = item.sku;\n      this.itemsSubsMap[sku] = item.quantity;\n    });\n  }\n  //\n  // compute discount by vendor\n  // FIXME must be private\n  computeVendorDiscount() {\n    // init\n    this.vendorAmount = {};\n\n    //\n    // sum total by vendor\n    this.cache.items.forEach(item => {\n      const vendor = item.vendor.urlpath + item.hub;\n      if (!this.vendorAmount[vendor]) {\n        this.vendorAmount[vendor] = {\n          amount: 0, needed:0, discount: {}, hub:item.hub\n        };\n        Object.assign(this.vendorAmount[vendor].discount, item.vendor.discount, {total: 0});\n      }\n      this.vendorAmount[vendor].amount += (item.price * item.quantity);\n    });\n\n    //\n    // compute available discount\n    Object.keys(this.vendorAmount)\n          .map(vendor => this.vendorAmount[vendor])\n          .filter(vendor => vendor.discount.threshold)\n          .forEach(vendor => {\n      const amount = vendor.amount;\n      const discountMagnitude = Math.floor(amount / vendor.discount.threshold);\n      vendor.discount.needed = vendor.discount.threshold - amount % (vendor.discount.threshold | 0) + amount;\n      vendor.discount.total = discountMagnitude * vendor.discount.amount;\n    });\n\n    //\n    // DEBUG\n    // Object.keys(this.vendorAmount).forEach(vendor=>{\n    //   console.log('--- vendor.discount',vendor,this.vendorAmount[vendor])\n    // });\n  }\n\n  //\n  // this method start from estimateShippingFees,\n  // and compute the final amount\n  computeShippingFees(ctx:CartItemsContext) {\n    ctx.address = ctx.address || this.cache.address;\n\n    const customTime = this.getCurrentShippingTimePrice();\n\n    let {price,status} = this.estimateShippingFeesWithoutReduction(ctx);\n    //\n    // 0. testing deposit\n    if(status == 'multiple' && !ctx.forSubscription) {\n      return price;\n    }\n\n\n    //\n    // 1. testing deposit\n    if(status == 'deposit') {\n      return price;\n    }\n\n    //\n    // 2. check if user plan is available\n    if(status == 'plan') {\n      return price ;\n    }\n\n    //\n    // for normal shipping, the price is variable\n    const total = this.subTotal(ctx);\n\n\n    //\n    // 3. compute shipping\n    if (this.cartConfig.shipping.discountB &&\n      total >= this.cartConfig.shipping.discountB) {\n      price = Math.max(price - this.cartConfig.shipping.priceB,0);\n    } else if (this.cartConfig.shipping.discountA &&\n      total >= this.cartConfig.shipping.discountA) {\n      price = Math.max(price - this.cartConfig.shipping.priceA,0);\n    }\n\n    return price ;\n  }\n\n  estimateShippingFeesWithoutReduction(ctx) {\n    if(!this.isReady) {\n      return {price:0,status:'shipping'};\n    }\n\n    const address = ctx.address;\n\n    //\n    // 1. check if there is a pending order for this address\n    if(!ctx.forSubscription && this.hasShippingReductionMultipleOrder(address)) {\n      return {price:0,status:'multiple'};\n    }\n\n    //\n    // 2. testing deposit\n    // FIXME issue with streetAdress vs. streetAddress\n    const deposit = this.defaultConfig.shared.hub.deposits.find(add => {\n      return UserAddress.isEqual(address,add) &&\n        add.fees >= 0;\n    });\n\n    if (deposit && deposit.fees>=0) {\n      return {price:deposit.fees,status:'deposit'};\n    }\n\n    //\n    // 3. check if user plan is available\n    if(this.currentUser.plan &&\n       this.currentUser.plan.defaultShipping >=0 ) {\n      return {price:this.currentUser.plan.defaultShipping,status:'plan'};\n    }\n\n\n    //\n    // 4. compute shipping fees based on address\n    const postalCode = address&&address.postalCode || '1234567';\n\n    let district = config.getShippingDistrict(postalCode);\n\n\n    //\n    // get default price for this address\n    let price = this.cartConfig.shipping.price[district];\n    price += this.getCurrentShippingTimePrice();\n\n    return {price,status:'shipping'};\n  }\n\n\n\n  //\n  // always look for items that are not in subscription\n  // Get the item whatever the frequency is\n  findBySku(sku: number, hub: string, frequency?:boolean): CartItem {\n    const item = this.cache.items.find(item => item.sku == sku && item.hub == hub && !!item.frequency == !!frequency);\n    return Object.assign({},item);\n  }\n  findIndexBySku(sku: number, hub: string, frequency?:boolean): number {\n    return this.cache.items.findIndex(item => item.sku == sku && item.hub == hub && !!item.frequency == !!frequency );\n  }\n\n\n  getCurrentGateway(): { fees: number, label: string } {\n    if(!this.isReady){\n      return this.cartConfig.gateway;\n    }\n    this.updateGatewayFees();\n    return this.cartConfig.gateway;\n  }\n\n\n  getItemsQtyMap(sku: number, hub: string, frequency?) {\n    const item = sku + hub +(!!frequency);\n    return this.itemsQtyMap[item] || 0;\n  }\n\n  getSubsQtyMap(sku: number) {\n    const item = sku;// + hub ;\n    return this.itemsSubsMap[item] || 0;\n  }\n\n  //\n  // by default all items without active subscription\n  // forSubscription => only for \"week\" or \"month\" item\n  // onSubscription => include active items\n  // lastMinute => only items available for last minute (non-destructive filter)\n  getItems(ctx:CartItemsContext) {\n    const onsubs =ctx.onSubscription ? this.cache.items.filter(item => item.active): [];\n    let items = (this.cache.items||[])\n    items = items.filter(item =>  (!ctx.hub||item.hub == ctx.hub))\n                 .filter(item =>  (ctx.forSubscription==undefined)||(ctx.forSubscription==!!item.frequency)).concat(onsubs);\n\n    // ✅ FILTRE LASTMINUTE : Non-destructeur, filtre uniquement si demandé\n    if (ctx.lastMinute) {\n      items = items.filter(item => item.lastMinute === true);\n    }\n\n    return items;\n  }\n\n  getName(){\n    return this.cache.name;\n  }\n\n  getCID(){\n    return this.cache.cid;\n  }\n\n  getShared(name:string): Observable<CartModel>  {\n    const params = { name };\n    return this.$http.get<CartModel>(ConfigService.defaultConfig.API_SERVER + '/v1/cart/shared', {\n      params,\n      headers: this.headers,\n      withCredentials: (configCors())\n    }).pipe(\n      tap(model => {\n        model.items.forEach(item => Object.assign(item , new CartItem(item)))\n        this.cache.shared = model;\n      })\n    );\n  }\n  getCurrentShippingAddress(): UserAddress {\n    return this.cache.address;\n  }\n\n\n  getShippingDayForMultipleHUBs() {\n    const hubsDate = [];\n    this.defaultConfig.shared.hubs.forEach(hub => {\n      // ✅ MIGRATION: Utiliser CalendarService au lieu d'Order\n      hubsDate.push(this.$calendar.getValidShippingDatesForHub(hub, { days: 7 }));\n    });\n\n    if(hubsDate.length==0){\n      // ✅ MIGRATION: Utiliser CalendarService au lieu d'Order\n      return this.$calendar.getValidShippingDatesForHub(this.currentHub, { days: 7 });\n    }\n\n    if(hubsDate.length==1){\n      return hubsDate[0];\n    }\n\n    const intersection = hubsDate[0].filter(function(n) {\n      return hubsDate[1].indexOf(n) !== -1;\n    });\n\n    //FIXME create intersection for HUBs count > 2\n    return intersection;\n  }\n\n  getCurrentShippingDay() {\n    if(!this.cache.currentShippingDay) {\n      // ✅ MIGRATION: Utiliser CalendarService au lieu d'Order\n      return this.$calendar.nextShippingDay(this.defaultConfig.shared.hub, this.currentUser);\n    }\n    return this.cache.currentShippingDay;\n  }\n  getCurrentShippingTime() {\n    return this.cache.currentShippingTime;\n  }\n\n  isCurrentShippingLastMinute() {\n    return !!this.cache.currentShippingLastMinute;\n  }\n\n  selectLastMinuteShipping(now: Date = new Date()) {\n    const hub = this.defaultConfig.shared.hub;\n    const availability = this.$calendar.isLastMinuteAvailable(hub, { now });\n    if (!availability.available) {\n      throw new Error('Last minute shipping is not available');\n    }\n    const when =  now;\n    const hours = availability.hours || this.$calendar.getDefaultTimeByDay(when, hub);\n    this.setShippingDay(when, hours, { lastMinute: true });\n  }\n\n  getCurrentShippingTimePrice() {\n    return this.cartConfig.shipping.pricetime[this.cache.currentShippingTime]||0;\n  }\n\n  getCurrentPaymentMethod() {\n    return this.cache.payment;\n  }\n\n\n  //\n  // TODO should be refactored (distance between real shop settings and cart values)!!\n  getVendorDiscount(item: CartItem) {\n    // const vendor = this.vendorAmount[item.vendor.urlpath + item.hub];\n    // return vendor ? vendor.discount : 0;\n    return 0;\n  }\n\n  //\n  // FIXME, discount.vendorAmount is DEPRECATED\n  // NOTE, discount is based on items that bellongs to the current HUB\n  getTotalDiscount(hub: string): number {\n    let amount = 0;\n    // for (const vendor in this.vendorAmount) {\n    //   if(this.vendorAmount.hub == hub) {\n    //     amount += (this.vendorAmount[vendor].discount.amount || 0);\n    //   }\n    // }\n\n    return Utils.roundAmount(amount);\n  }\n\n\n  hasError(hub: string): boolean {\n    //\n    // get all items to remove at the right position\n    const ctx:CartItemsContext = {\n      hub: (hub||this.currentHub)\n    }\n\n    return this.getItems(ctx).some(item => item.error);\n  }\n\n  hasPendingOrder(): Order {\n    return (this.currentPendingOrder);\n  }\n\n  hasPotentialShippingReductionMultipleOrder(): boolean {\n    if(!this.isReady) {\n      return false;\n    }\n    //\n    // check if there is a pending order for this address\n    if(this.currentPendingOrder &&\n       this.currentPendingOrder.shipping){\n      const whenDay = this.currentPendingOrder.shipping.when.getDate();\n      const nextDay = this.cache.currentShippingDay && this.cache.currentShippingDay.getDate();\n      return (whenDay == nextDay );\n    }\n    return false;\n  }\n\n\n  hasShippingReductionMultipleOrder(address?): boolean {\n    const potential = this.hasPotentialShippingReductionMultipleOrder();\n    if(!potential){\n      return false;\n    }\n    const pending = UserAddress.from(this.currentPendingOrder.shipping);\n    return (UserAddress.isEqual(address,pending));\n  }\n\n  //\n  // FIXME shipping reduction for pending depends on dst address\n  hasShippingReduction(ctx:CartItemsContext) {\n    // total items + service fees\n    const total = this.subTotal(ctx);\n    const address = ctx.address||this.cache.address;\n\n    // return\n    const multiple = this.hasShippingReductionMultipleOrder(address);\n    let discountA=false, discountB=false, deposit=false;\n\n    if(address && address['fees']>=0) {\n      deposit = true;\n    }\n\n    if(multiple||deposit){\n      return {multiple,discountA,discountB,deposit};\n    }\n\n    // implement 3) get free shipping!\n    if (this.cartConfig.shipping.discountB &&\n      total >= this.cartConfig.shipping.discountB) {\n        discountB=true;\n    }\n    else if (this.cartConfig.shipping.discountA &&\n      total >= this.cartConfig.shipping.discountA) {\n        discountA=true;\n    }\n\n    return {multiple,discountA,discountB,deposit};\n  }\n\n\n  isCurrentShippingDayAvailable(shop: Shop): boolean {\n    if(!this.cache.currentShippingDay) {\n      return false;\n    }\n    const weekday = this.cache.currentShippingDay.getDay();\n    return shop.available.weekdays.indexOf(weekday) > -1;\n  }\n\n  load(shared?:string) {\n    this.load$.next(shared);\n  }\n\n  loadCache(shared?: string) {\n    if(this.cache.loaded) {\n      return;\n    }\n    //\n    // IFF next shipping day is Null (eg. hollidays)=> currentShippingDay\n    // ✅ MIGRATION: Utiliser CalendarService au lieu d'Order et config\n    const nextShippingDay = this.$calendar.nextShippingDay(this.defaultConfig.shared.hub, this.currentUser);\n    const currentShippingDay = this.$calendar.potentialShippingWeek(this.defaultConfig.shared.hub)[0];\n    this.cache.currentShippingDay = new Date(nextShippingDay || currentShippingDay);\n    // ✅ FIXED: lastMinute JAMAIS activé par défaut au load\n    this.cache.currentShippingLastMinute = false;\n\n    this.cache.updated = new Date('1990-12-01T00:00:00');\n    this.cache.uuid = shared;\n\n    try {\n      const fromLocal = JSON.parse(localStorage.getItem('kng2-cart')) as CartContext;\n\n      // FIXME missing test\n      if (!fromLocal) {\n        return;\n      }\n\n\n      //\n      // check shipping date or get the next one\n      // FIXME default shipping time is hardcoded\n      const day = new Date(fromLocal.currentShippingDay || nextShippingDay || currentShippingDay);\n      // ✅ MIGRATION: Utiliser CalendarService au lieu de defaultConfig\n      const hours = this.$calendar.getDefaultTimeByDay(day, this.defaultConfig.shared.hub);\n      // ✅ FIXED: NE JAMAIS charger lastMinute depuis localStorage\n      // lastMinute est une exception temporaire qui doit être activée manuellement\n      this.setShippingDay(day, hours, { lastMinute: false });\n\n      //\n      // get state from pending order\n      if(this.currentPendingOrder){\n        const day = new Date(this.currentPendingOrder.shipping.when);\n        // ✅ MIGRATION: Utiliser CalendarService au lieu de defaultConfig\n        const hours = this.$calendar.getDefaultTimeByDay(day, this.defaultConfig.shared.hub);\n        // ✅ FIXED: NE JAMAIS charger lastMinute depuis pending order\n        // Si c'était lastMinute hier, ce n'est plus valide aujourd'hui\n        this.setShippingDay(day, hours, { lastMinute: false });\n      }\n\n      //\n      // if selected shipping date is before the next one => reset the default date\n      if (this.cache.currentShippingDay < nextShippingDay) {\n        const day = nextShippingDay;\n        // ✅ MIGRATION: Utiliser CalendarService au lieu de defaultConfig\n        const hours = this.$calendar.getDefaultTimeByDay(day, this.defaultConfig.shared.hub);\n        this.setShippingDay(day,hours);\n      }\n\n\n      if (fromLocal.updated) {\n        this.cache.updated = new Date(fromLocal.updated);\n      }\n\n      //\n      // items are overrided on serverLoad()\n      if (!shared&&fromLocal.items) {\n        this.cache.items = fromLocal.items.map(item => new CartItem(item));\n      }\n\n      //\n      // subscription params\n      if(fromLocal.subscriptionParams) {\n        this.cache.subscriptionParams = fromLocal.subscriptionParams;\n      }\n\n      //\n      // check existance on the current user (example when you switch account, cart should be sync )\n      if (!this.currentUser.addresses.some(address => UserAddress.isEqual(address,this.cache.address)) &&\n        !this.defaultConfig.shared.hub.deposits.some(address => UserAddress.isEqual(address,this.cache.address))) {\n        this.cache.address = new UserAddress({});\n      }\n\n      //console.log('---DEBUG cart:load',this.cache.address);\n      this.cache.loaded = true;\n    } catch(err) {\n      // First time in karibou.ch localStorage is undefined\n      this.cache.items = []\n      this.cache.updated = new Date('1990-12-01T00:00:00');\n      this.cache.loaded = true;\n    }\n  }\n\n  internalLoad(shared?: string) {\n    //\n    // INIT local values\n    this.loadCache(shared);\n    //\n    // INIT cart items\n    // check values\n    const syncCart: any = {\n        items: this.cache.items || [],\n        updated: this.cache.updated\n    };\n\n    //\n    // FIXME assert currentHub existance\n    const params = {\n      cart: syncCart,\n      hub: this.currentHub\n    };\n\n    //\n    // use a shared cart ?\n    const query: any = {};\n    if(shared) {\n      query.uuid = shared;\n    }\n\n\n    this.$http.post<CartModel>(ConfigService.defaultConfig.API_SERVER + '/v1/cart/get', params, {\n      params: query,\n      headers: this.headers,\n      withCredentials: (configCors())\n    }).pipe(\n      map(cart => {\n        return cart;\n      }),\n      catchError(() => {\n        return of(syncCart);\n      })\n    ).subscribe((cart:CartContext) => {\n      if (cart) {\n        //\n        // reset local cart ?\n        this.cache.cid = cart.cid? cart.cid[0] : this.cache.cid ;\n        this.cache.name = cart.name ;\n        this.cache.updated = new Date(cart.updated);\n        this.cache.subscriptionParams = this.cache.subscriptionParams || cart.subscriptionParams;\n        //\n        // FIXME wrong way to check valid items\n        const hubs = this.defaultConfig.shared.hubs.map(hub=>hub.slug);\n\n        //\n        // restore errors from the last checkout validation\n        const itemsWithError = this.cache.items.filter(item => item.error);\n\n        this.cache.items = cart.items.map( item => {\n          const got = itemsWithError.find(itm => itm.sku == item.sku);\n          item.error = got && got.error;\n          item.shared=(!!shared);\n          return new CartItem(item)\n        });\n\n\n        //\n        // compute temporary discount on load\n        const vendors: {[key: string]: Shop } = {};\n        this.cache.items.forEach(item => vendors[item.vendor.urlpath] = (item.vendor as any as Shop));\n\n        //\n        // vendors\n        Object.keys(vendors).forEach(slug => {\n          const vendor = vendors[slug];\n          const elem = this.currentShops.find(v => v.urlpath === vendor.urlpath);\n          if(!vendor.discount) {\n            vendor.discount = {\n              active : true,\n              threshold : 0,\n              amount : 0\n            };\n          }\n          vendor.discount.active = true;\n        });\n        this.computeVendorDiscount();\n        this.computeItemsQtyMap();\n\n        //\n        // broadcast subscriptions\n        if(cart.subscriptions && cart.subscriptions.length) {\n          this.subscriptionsGet().toPromise().then((contracts)=>{\n            const items = contracts.map(contract => contract.items).reduce((all,items)=>{\n              return all.concat(items.map(itm=> CartItem.fromContract(itm)));\n            },[] as CartItem[])\n\n            this.computeSubsQtyMap(items);\n\n          });\n        }\n        // console.log('---- cart.remote-load (def:time)',this.getCurrentShippingTime(),'(def:items)',this.cache.items)\n\n      }\n\n      //\n      // first load initiate cart\n      this.isReady = true;\n\n\n      this.cart$.next({ action: CartAction.CART_LOADED });\n    });\n\n    //\n    // TODO\n    // this.cart$.next({ action: CartAction.CART_LOAD_ERROR });\n  }\n\n\n  removeAll(product: CartItem, variant?: string) {\n    this.checkIfReady();\n    //\n    // get all items to remove at the right position\n    const items = this.cache.items;\n    // FIXME same product on multiple hub  will not work\n    const indexInCache = this.findIndexBySku(product.sku,product.hub,!!product.frequency);\n    if(indexInCache == -1 ){\n      return this.save({ item:items[indexInCache], action: CartAction.ITEM_REMOVE });\n    }\n\n    const item = items[indexInCache];\n    // can not remove item from active sub\n    // remove all items\n    this.cache.items.splice(indexInCache, 1);\n\n    //\n    // update discount amount\n    this.computeVendorDiscount();\n    this.computeItemsQtyMap();\n\n    return this.save({ item, action: CartAction.ITEM_REMOVE });\n  }\n\n  remove(product: CartItem, variant?: string) {\n    this.checkIfReady();\n\n    //\n    // get all items to remove at the right position\n    const items = this.cache.items;\n    const indexInCache = this.findIndexBySku(product.sku, product.hub,!!product.frequency);\n    if(indexInCache == -1 ){\n      return this.save({ item:product, action: CartAction.ITEM_REMOVE });\n    }\n    //\n    // always remove one item qty\n    product.quantity = 1;\n    const item = items[indexInCache];\n    //\n    // can not remove item from active sub => throw Err('...')\n\n    if (item.quantity <= 1) {\n      this.cache.items.splice(indexInCache, 1);\n    }\n    //\n    // update the finalprice\n    else{\n      item.quantity -= 1;\n      item.finalprice = item.price * item.quantity;\n    }\n    //\n    // update discount amount\n    this.computeVendorDiscount();\n    this.computeItemsQtyMap();\n    return this.save({ item, action: CartAction.ITEM_REMOVE });\n  }\n\n  //\n  // save with localStorage\n  // save with api/user/cart\n  save(state: CartState) {\n    state.server = [];\n\n    this.saveServer(state)\n    .pipe(\n      catchError(e => {\n        return of(state);\n      }),\n      switchMap(state => {\n        return this.saveLocal(state);\n      })\n    )\n    .subscribe(state => {\n      this.computeItemsQtyMap();\n      this.cart$.next(state);\n    }, error => {\n      this.cart$.next({ action: CartAction.CART_SAVE_ERROR});\n    });\n  }\n\n  private saveLocal(state: CartState): Observable<CartState> {\n    return new Observable((observer) => {\n      try {\n        //\n        // update local date IFF not authenticated or invalid\n        if(!state.server || !state.server.length) {\n            this.cache.updated = new Date();\n        }\n        // console.log('---DEBUG kng2-cart:saveLocal',this.cache);\n        if(this.isReady){\n          const keep = this.cache.subscriptionsContent;\n          const cached = Object.assign({},this.cache);\n          cached.subscriptionsContent = [];\n          this.cache.subscriptionsContent = keep;\n          localStorage.setItem('kng2-cart', JSON.stringify(this.cache));\n        }\n        observer.next(state);\n      } catch (e) {\n        observer.error(e);\n      }\n      observer.complete();\n    });\n  }\n\n  private saveServer(state: CartState): Observable<CartState> {\n    const model: CartModel = new CartModel();\n    const params: any = {};\n    model.cid = this.cache.cid;\n    model.items = this.cache.items;\n\n    if (!this.currentUser.isAuthenticated()) {\n      return throwError('Unauthorized');\n    }\n    //\n    // those events don't need to store on server\n    // - CartAction.CART_SUBSCRIPTION\n    // - CartAction.PAYMENT\n    // - CartAction.SHIPPING\n    const states = [\n          CartAction.ITEM_ADD,\n          CartAction.ITEM_UPDATE,\n          CartAction.ITEM_REMOVE,\n          CartAction.ITEM_ALL,\n          CartAction.CART_CLEARED];\n    if (states.indexOf(state.action) === -1) {\n      return of(state);\n    }\n    //\n    // case of add/remove item\n    if (state.item && [CartAction.ITEM_ADD,CartAction.ITEM_UPDATE, CartAction.ITEM_REMOVE].indexOf(state.action) > -1) {\n      model.items = [state.item];\n      params.action = state.action as CartAction;\n    }\n\n    //\n    // FIXME assert currentHub existance\n    params.hub = this.currentHub;\n\n    //\n    // use a shared cart ?\n    if(this.cache.uuid) {\n      params.uuid = this.cache.uuid;\n    }\n\n    return this.$http.post<CartModel>(ConfigService.defaultConfig.API_SERVER + '/v1/cart', model, {\n      params: (params),\n      headers: this.headers,\n      withCredentials: (configCors())\n    }).pipe(\n      map(model => {\n      this.cache.cid = model.cid;\n      this.cache.updated = new Date(model.updated);\n\n      //\n      // restore errors from the last checkout validation\n      const itemsWithError = this.cache.items.filter(item => item.error);\n      state.server = this.cache.items = model.items.map( item => {\n        const got = itemsWithError.find(itm => itm.sku == item.sku);\n        item.error = got && got.error;\n        return new CartItem(item)\n      });\n\n      //console.log('---DEBUG kng2-cart:saveServer',this.cache.address);\n\n      //\n      // sync with server is done!\n      return state;\n    }),\n    catchError(e => {\n      return this.saveLocal(state);\n    }));\n  }\n\n\n\n  //\n  // set default user address\n  setShippingAddress(address: UserAddress|DepositAddress) {\n    //\n    // reset cache address\n    if(!address) {\n      this.cache.address = new UserAddress({});\n      return;\n    }\n\n    if(UserAddress.isEqual(address,this.cache.address)) {\n      return true;\n    }\n\n    //\n    // check if deposit\n    const deposit = this.defaultConfig.shared.hub.deposits.find(add => {\n      return UserAddress.isEqual(address,add) && add.fees >= 0;\n    });\n\n    //\n    // deposit from HUB a can not be set on HUB b\n    if(!deposit && address['fees']>=0) {\n      address = new UserAddress({});\n    }\n\n    //\n    // check if address exist before to save it\n    if(deposit && deposit.fees>=0) {\n      address = deposit;\n    }\n\n\n    this.cache.address = address;\n    this.save({ action: CartAction.CART_ADDRESS });\n    return true;\n  }\n\n  //\n  // set default user payment\n  setPaymentMethod(payment: UserCard) {\n    if(UserCard.isEqual(this.cache.payment,payment)) {\n      return;\n    }\n    this.cache.payment = payment;\n    this.updateGatewayFees();\n    this.save({ action: CartAction.CART_PAYMENT });\n  }\n\n  setShippingDay(newDate: Date, hours: number, options: { lastMinute?: boolean } = {}) {\n    const lastMinute = !!options.lastMinute;\n    if (newDate.equalsDate(this.cache.currentShippingDay) &&\n        this.cache.currentShippingTime == hours &&\n        !!this.cache.currentShippingLastMinute === lastMinute) {\n      return;\n    }\n    this.cache.currentShippingDay = newDate;\n    this.cache.currentShippingTime = hours;\n    this.cache.currentShippingLastMinute = lastMinute;\n    const data = {\n      currentShippingDay:newDate,\n      currentShippingTime:hours,\n      currentShippingLastMinute:lastMinute\n    }\n    this.save({ action: CartAction.CART_SHIPPING, data});\n  }\n\n  //\n  // init cart context => load & merge available cart, with current one\n  // - user latest orders (helper for complement)\n  setContext(config: Config, user: User, shops?: Shop[], orders?:Order[]) {\n\n    this.currentShops = shops || this.currentShops || [];\n    Object.assign(this.currentUser, user);\n\n\n    //\n    // if there is an open order,\n    // - set the default address\n    // - set the default date\n    orders = (orders||[]).sort((a,b)=> b.oid-a.oid);\n\n    // DEPRECATED\n    // // find order for the next shipping day\n    // // EnumFinancialStatus.authorized or EnumFinancialStatus.prepaid\n    // const availableShippingDays = config.potentialShippingWeek(config.shared.hub);\n    // const defaultNext = Order.nextShippingDay(user,config.shared.hub);\n    // let order = orders.filter(order => ['authorized','prepaid'].indexOf(order.payment?.status)>-1)\n    //                   .find(order =>  !order.shipping.parent && order.shipping.when == defaultNext);\n\n    // //\n    // // no order for next shipping day\n    // // find the first open\n    // if(!order) {\n    //   order = orders.filter(order => ['authorized','prepaid'].indexOf(order.payment?.status)>-1)\n    //                 .find(order =>  !order.shipping.parent);\n    // }\n\n    //\n    // setup default payment and address\n    if(orders.length){\n      const order = orders.find(order =>  order.payment && order.shipping);\n      const issuer = order.payment.issuer;\n      this.cache.payment = this.cache.payment || user.payments.find(payment => payment.issuer == issuer);\n      this.cache.address = this.cache.address || UserAddress.from(order.shipping);\n    }\n\n    // find the first pending order\n    let order = orders.filter(order => ['authorized','prepaid'].indexOf(order.payment?.status)>-1)\n                      .find(order =>  !order.shipping.parent);\n\n\n\n    //\n    // setup default shipping day\n    if(!this.currentPendingOrder && order){\n      this.currentPendingOrder = order;\n      const day = new Date(this.currentPendingOrder.shipping.when);\n      // ✅ MIGRATION: Utiliser CalendarService au lieu de defaultConfig\n      const hours = this.$calendar.getDefaultTimeByDay(day, this.defaultConfig.shared.hub);\n      //\n      // verify if the day is available on current HUB\n      // ✅ MIGRATION: Utiliser CalendarService au lieu de config\n      const days = this.$calendar.potentialShippingWeek(config.shared.hub);\n      if(days.some(one => one.equalsDate(day))) {\n        this.cache.currentShippingDay = day;\n        this.cache.currentShippingTime = hours;\n        // ✅ FIXED: lastMinute JAMAIS activé depuis pending order\n        this.cache.currentShippingLastMinute = false;\n      }\n    }\n\n\n    //\n    // avoid multiple reset on same context\n    if(this.currentHub == config.shared.hub.slug) {\n      return;\n    }\n    Object.assign(this.defaultConfig, config);\n    this.currentHub = this.defaultConfig.shared.hub.slug;\n\n    this.cartConfig.shipping = this.defaultConfig.shared.shipping;\n\n    //\n    // set default shipping address\n    this.cache.address = this.cache.address || user.getDefaultAddress();\n\n\n    if ((this.cache.address['fees'] >= 0)) {\n      const deposit = this.cache.address as DepositAddress;\n      this.cache.address = new DepositAddress(deposit);\n\n    }\n\n    //\n    // mark cart ready\n    this.load();\n  }\n\n  setError(errors, hub) {\n    for (let error of errors) {\n      const sku = Object.keys(error)[0];\n      const items = this.cache.items.filter(item => item.sku == +sku);\n      items.forEach(item => item.error = error[sku]);\n    }\n  }\n\n\n\n  subTotal(ctx:CartItemsContext): number {\n    let items = this.getItems(ctx);\n\n    let total = 0;\n    items.forEach((item) => {\n      total += (item.price * item.quantity);\n    });\n\n    const gateway = this.getCurrentGateway();\n    const totalFees = config.shared.hub.serviceFees + gateway.fees;\n\n    const fees = (totalFees) * total;\n    return Utils.roundAmount(total + fees);\n  }\n\n\n  /**\n   * Subscribe to the user stream.\n   */\n  subscribe(\n    onNext, onThrow?: ((exception: any) => void) | null,\n    onReturn?: (() => void) | null): ISubscription {\n    return this.cart$.subscribe({ next: onNext, error: onThrow, complete: onReturn });\n  }\n\n\n\n  //\n  // total = items + shipping - total discount\n  // total = stotal + stotal*payment.fees\n  // WARNNG -- WARNNG -- WARNNG -- edit in all places\n  total(ctx:CartItemsContext): number {\n    let total = this.subTotal(ctx);\n    const shipping = this.computeShippingFees(ctx);\n    const discount = this.getTotalDiscount(ctx.hub);\n    total += (shipping - discount);\n\n    // Rounding up to the nearest 0.05\n    return Utils.roundAmount(total);\n\n  }\n\n\n  totalHubFees(ctx:CartItemsContext): number {\n    const items = this.getItems(ctx).filter(item => !item.active);\n    let total = 0;\n    items.forEach((item) => {\n      total += (item.price * item.quantity);\n    });\n\n    //\n    // adding gateway fees\n    const gateway = this.getCurrentGateway();\n    const totalFees = config.shared.hub.serviceFees + gateway.fees;\n\n    const fees = (totalFees) * total;\n    return Utils.roundAmount(fees);\n  }\n\n  //\n  // set cart tax and return payment label\n  updateGatewayFees(): boolean {\n    if (!this.cache.payment) {\n      return false;\n    }\n    if (this.cache.payment.issuer == this.cartConfig.gateway.label) {\n      return true;\n    }\n    //\n    // init default one\n    this.cartConfig.gateway = this.DEFAULT_GATEWAY;\n    return this.defaultConfig.shared.order.gateway.some(gateway => {\n      // TODO check issuer vs type\n      if (gateway.label === this.cache.payment.issuer) {\n        this.cartConfig.gateway = gateway;\n        return true;\n      }\n      return false;\n    });\n  }\n\n}\n\n","import { HttpClient,HttpHeaders } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { config, configCors } from './config';\nimport { Utils } from './util';\n\n\nimport { ReplaySubject ,  Observable ,  throwError as _throw ,  of, BehaviorSubject } from 'rxjs';\nimport { map, catchError, tap } from 'rxjs/operators';\nimport { AnalyticsService } from './metrics.service';\n\n\nexport class Category {\n  constructor(json?: any) {\n    let defaultCategory={\n      tags:[],\n      usedBy:[],\n      weight:0,\n      child:[]\n    }\n\n    Object.assign(this, Utils.merge(defaultCategory,json||{}));\n  }\n  deleted:boolean;\n  _id:string;\n  slug: string;\n  group: string;  /* permet de grouper une catégorie (toutes les catégories des artisans, producteurs*/\n  cover: string;  /* image de la catégorie */\n  color: string;  /* couleur de la catégorie */\n  description?: string;\n  image: string; /* icon associé à la catégorie */\n  name: string;\n  weight:number; /*permet d'ordonner les cat les plus légère en haut */\n  type: string;\n  home: boolean; /* afficher une sélection de cat sur la home */\n  active: boolean;\n  usedBy?:number[];\n  tags:string[];\n  child:{\n    name:string;\n    weight:number;\n  }[];\n}\n\n//\n// Internal cache of request\n// simple way to share instance between components\nclass Cache{\n  list: Category[];\n  map: Map<string, Category> //key is a slug\n  constructor(){\n    this.list=[];\n    this.map=new Map();\n  }\n}\n\n@Injectable()\nexport class CategoryService {\n  //\n  // common multicast to update UX when one shop on the list is modified\n  // use it for singleton usage of category\n  public  category$: ReplaySubject<Category>;\n  public  categories$: BehaviorSubject<Category[]> | ReplaySubject<Category[]>;\n\n  config: any;\n\n\n  private cache: Cache = new Cache();\n  private headers: HttpHeaders;\n\n  constructor(\n    private http: HttpClient\n    ) {\n      this.headers = new HttpHeaders({\n        'Content-Type': 'application/json',\n        'Cache-Control' : 'no-cache',\n        'Pragma' : 'no-cache',\n        'ngsw-bypass':'true',\n        'k-dbg': AnalyticsService.FBP\n      });\n      this.config = config;\n\n    // this.category$ = new ReplaySubject(1);\n    this.categories$ = new BehaviorSubject<Category[]>(null);\n  }\n\n  private deleteCache(slug: string): Category {\n      const incache = this.cache.map.get(slug);\n      if (incache) {\n          incache.deleted = true;\n          this.cache.map.delete(slug);\n      }\n      return incache;\n  }\n\n  private updateCache(category: Category): Category {\n    if(!this.cache.map.get(category.slug)){\n        this.cache.map.set(category.slug,new Category(category))\n        return this.cache.map.get(category.slug);\n    }\n    return Object.assign(this.cache.map.get(category.slug), category);\n  }\n\n\n  getCurrent() {\n    throw new Error(\"Not implemented\");\n  };\n\n\n  //\n  // retourne le Nom de la catégorie ou un message d'erreur\n  findNameBySlug(slug:string):Observable<string> {\n    return this.get(slug).pipe(\n      map(c=>c.name),\n      catchError(err=>of(\"Catégorie Inconnue\"))\n    );\n  };\n\n  findBySlug(slug:string):Observable<Category> {\n    return this.get(slug)\n  };\n\n  findByGroup(name:string):Category[] {\n    // TODO load if `this.cache.list` is empty?\n    return this.cache.list.filter(category => category.group === name);\n  }\n\n  // request categories with filter\n  select(filter?: any):Observable<Category[]> {\n    filter = filter || {};\n\n    return this.http.get<Category[]>(this.config.API_SERVER + '/v1/category', {\n      params: filter,\n      headers: this.headers,\n    }).pipe(\n      map(categories => categories.map(this.updateCache.bind(this)) as Category[]),\n      tap(categories => {\n        this.categories$.next(categories);\n        return categories;\n      })\n    );\n  }\n\n  //get category based on his slug\n  get(slug:string):Observable<Category> {\n    // check if in the cache\n    if (this.cache.map.get(slug)){\n      return of(this.cache.map.get(slug));\n    }\n    return this.http.get<Category>(this.config.API_SERVER + '/v1/category/'+slug, {\n      headers: this.headers,\n    }).pipe(\n      map(cat => this.updateCache(cat))\n    );\n  }\n\n\n  //   app.post('/v1/category/:category', auth.ensureAdmin, categories.update);\n  save(slug:string, cat:Category):Observable<Category> {\n    return this.http.post<Category>(this.config.API_SERVER + '/v1/category/'+slug, cat, {\n      headers: this.headers,\n      withCredentials:true\n    }).pipe(\n      map(cat => this.updateCache(cat))\n    );\n\n  }\n\n//  app.post<Category>('/v1/category', auth.ensureAdmin, categories.create);\n  create(cat: Category):Observable<Category> {\n    return this.http.post<Category>(this.config.API_SERVER + '/v1/category', cat, {\n      headers: this.headers,\n      withCredentials:true\n    }).pipe(\n      map(cat => this.updateCache(cat))\n    );\n  }\n\n//  app.put('/v1/category/:category', auth.ensureAdmin, auth.checkPassword, categories.remove);\n  remove(slug:string, password:string) {\n    return this.http.put(this.config.API_SERVER + '/v1/category/' + slug,{password:password}, {\n      headers: this.headers,\n      withCredentials:true\n    }).pipe(\n      map(result => this.deleteCache(slug))\n    );\n  }\n\n\n  private handleError (error: Response | any) {\n    //\n    // In a real world app, you might use a remote logging infrastructure\n    let errMsg: string;\n    if (error instanceof Response) {\n      const body = error.json() || '';\n      const err = JSON.stringify(body);\n      errMsg = `${error.status} - ${error.statusText || ''} ${err}`;\n    } else {\n      errMsg = error.message ? error.message : error.toString();\n    }\n    return _throw(errMsg);\n  }\n\n}\n","import { HttpClient,HttpHeaders } from '@angular/common/http';\n\nimport { Injectable } from '@angular/core';\nimport { config } from './config';\n\n\nimport { ReplaySubject ,  Observable ,  of } from 'rxjs';\nimport { map } from 'rxjs/operators';\n\nexport class Document implements DocumentHeader {\n  constructor(json?: any) {\n    let defaultDocument={\n      title:{},\n      header:{},\n      content:{},\n      photo:{\n        bundle:[]\n      },\n      created:new Date(),\n      available:false,\n      published:false,\n      skus:[],\n      style:undefined,\n      signature:undefined,\n      type: undefined\n    }\n      \n    Object.assign(this, json||defaultDocument);\n  }\n\n  slug:string[];\n  title:{\n    fr:string;\n    en:string;\n  };\n  header:{\n    fr:string;\n    en:string;\n  };\n  content:{\n    fr:string;\n    en:string;\n  };\n  photo:{\n    header:string;\n    bundle:string[];\n  };\n  deleted:boolean;\n  available:boolean;\n  published:boolean;\n  skus:number[];\n  style:string;\n  signature:string;\n  created:Date;\n  type: string;\n}\n\n\nexport interface DocumentHeader{\n  slug:string[];\n  title:{fr:string,en:string};\n  available:boolean;\n  published:boolean;\n  signature:string;\n}\n\n//\n// Internal cache of request\n// simple way to share instance between components\nclass Cache{\n  list: Document[];\n  map: Map<string, Document> //key is a slug\n  constructor(){\n    this.list=[];\n    this.map=new Map();\n  }\n}\n\n@Injectable()\nexport class DocumentService {\n  //\n  // common multicast to update UX when one shop on the list is modified\n  // use it for singleton usage of category\n  public  category$: ReplaySubject<Document>;\n\n  config:any;\n\n\n  private cache:Cache=new Cache();\n  private headers: HttpHeaders;\n\n  constructor(\n    private http: HttpClient\n    ) {\n      this.headers = new HttpHeaders({\n        'Content-Type': 'application/json',\n        'Cache-Control' : 'no-cache',\n        'Pragma' : 'no-cache',\n        'ngsw-bypass':'true'\n      });\n    this.config = config;\n  }\n\n  private deleteCache(slug: string) {\n      let incache=this.cache.map.get(slug);\n      if (incache) {\n          incache.deleted=true;\n          this.cache.map.delete(slug);\n      }\n      return incache;\n  }\n\n  private updateCache(doc: Document) {\n    if(!this.cache.map.get(doc.slug[0])){\n        this.cache.map.set(doc.slug[0],new Document(doc))\n        return this.cache.map.get(doc.slug[0]);\n    }\n    return Object.assign(this.cache.map.get(doc.slug[0]), doc);\n  }\n\n\n  getCategories():string[] {\n    if(!this.config.shared){\n      return [];\n    }\n    return this.config.shared.document.types;\n  }\n\n\n  select(type: string,headersOnly?:boolean):Observable<Document[]> {\n    let params:any={};\n    if(headersOnly){\n      params.headerOnly='true'\n    }\n    return this.http.get<Document[]>(this.config.API_SERVER + '/v1/documents/category/'+type, {\n      params:params,\n      headers: this.headers,\n      withCredentials: true\n    }).pipe(\n      map(documents => documents.map(this.updateCache.bind(this)))\n    );    \n  }\n\n  get(slug:string):Observable<Document> {\n    // check if in the cache\n    if (this.cache.map.get(slug)){\n      return of(this.cache.map.get(slug));\n    }\n\n    return this.http.get<Document>(this.config.API_SERVER + '/v1/documents/'+slug, {\n      headers: this.headers,\n      withCredentials: true\n    }).pipe(\n      map(doc => this.updateCache(doc))\n    );\n  }\n\n  getAll(headersOnly?:boolean):Observable<DocumentHeader[]>{\n    let params:any={};\n    if(headersOnly){\n      params.headerOnly='true'\n    }\n\n    return this.http.get<DocumentHeader[]>(this.config.API_SERVER + '/v1/documents', {\n      params: params,\n      headers: this.headers,\n      withCredentials: true\n    })\n  }\n  //\n  // all document already in cache\n  loaded(type?:string):Document[]{\n    let result:Document[]=[];\n    this.cache.map.forEach((doc,slug)=>{\n      if(doc.type==type||type===undefined){\n        result.push(doc);\n      }\n    })\n    return result;\n  }\n\n  save(slug:string, doc:Document):Observable<Document> {\n    return this.http.post<Document>(this.config.API_SERVER + '/v1/documents/'+slug, doc, {\n      headers: this.headers,\n      withCredentials: true\n    }).pipe(\n      map(doc => this.updateCache(doc))\n    );\n\n  }\n\n  create(doc: Document):Observable<Document> {\n    return this.http.post<Document>(this.config.API_SERVER + '/v1/documents', doc, {\n      headers: this.headers,\n      withCredentials: true\n    }).pipe(\n      map(doc => this.updateCache(doc))\n    );\n  }\n\n  remove(slug:string, password?:string) {\n    return this.http.put<Document>(this.config.API_SERVER + '/v1/documents/' + slug,{password:password},{\n      headers: this.headers,\n      withCredentials: true\n    }).pipe(\n      map(doc => this.deleteCache(slug))\n    );\n  }\n\n\n}\n","import { HttpClient,HttpHeaders } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { Category } from './category.service';\nimport { User } from './user.service';\n\nimport { ConfigService } from './config.service';\nimport { Utils } from './util';\n\nimport { ReplaySubject ,  Observable, BehaviorSubject, from } from 'rxjs';\nimport { map, tap, catchError } from 'rxjs/operators';\nimport { AnalyticsService } from './metrics.service';\nimport { configCors } from './config';\n\nexport class Shop {\n  // tslint:disable-next-line: variable-name\n  _id: string;\n  deleted: boolean;\n  urlpath: string;\n  name: string;\n  description: string;\n  url: string;\n  photo: {\n    owner: string;\n    bg: string;\n    fg: string;\n    logo: string;\n    gallery: string[];\n    source: string;\n  };\n\n  details:{\n    bio: boolean;\n    gluten: boolean;\n    lactose: boolean;\n    vegetarian: boolean;\n    local: boolean;\n  };\n\n\n  //\n  // define where this shop is available for collect\n  collect?: {\n    streetAdress: string;\n    postalCode: string;\n    geo: {\n      lat: number;\n      lng: number;\n    }\n  };\n\n  //\n  // where shop is located\n  address: {\n    // an other place where things are stored\n    depository: string;\n    name: string;\n    floor: string;\n    phone: string;\n    streetAdress: string;\n    region: string;\n    postalCode: string;\n    geo: {\n      lat: number;\n      lng: number;\n    }\n  };\n\n  //\n  // this shop belongsTo a category\n\n  catalog: Category;\n\n  //\n  // answer question about your shop\n  faq?: [{\n    q: string;\n    a: string;\n    updated: Date;\n  }];\n\n\n  available: {\n    categories: string[];\n    active: boolean;\n    from: Date,\n    to: Date,\n    weekdays: number[],\n    comment: string\n};\n\n  discount: {\n    amount: number;\n    threshold: number;\n    active: boolean;\n  };\n\n  info: {\n    //\n    // requiere a detailled email for order preparation\n    detailledOrder: boolean;\n    active: boolean;\n    comment: { type: string }\n  };\n\n  //\n  // type Date on pending, set true on active, false on deleted\n  status: any;\n  // secret value for the business model\n  // - > is available/displayed for shop owner and admin ONLY\n  // - > is saved on each order to compute bill\n  account:{\n    businessName?: string;\n    IBAN?: string;\n    BIC?: string;\n    fees?: number;\n    tva: {\n      number?: string,\n      fees?: number\n    },\n    updated: Date;\n  };\n  owner: User;\n  scoring: {\n    weight: number;\n    orders: number;\n    issues: number;\n    score: number;\n  };\n  created: Date;\n  marketplace: string[];\n\n  //\n  // Object methods\n\n\n\n\n  constructor(json?: any) {\n\n    const defaultShop = {\n\n      photo: {\n        gallery: []\n      },\n\n      details: {\n        bio: false,\n        gluten: false,\n        lactose: false,\n        vegetarian: false,\n        local: false,\n      },\n\n      address: {\n        geo: {},\n      },\n\n      catalog: new Category(),\n\n      available: {\n        active: false,\n        weekdays: []\n      },\n\n      discount: {\n        active: false,\n      },\n\n      info: {\n        //\n        // requiere a detailled email for order preparation\n        detailledOrder: false,\n        active: false\n      },\n\n      owner: {},\n      //\n      // type Date on pending, set true on active, false on deleted\n      status: false,\n      // secret value for the business model\n      // - > is available/displayed for shop owner and admin ONLY\n      // - > is saved on each order to compute bill\n      account: {\n        tva: {}\n      },\n      scoring: {}\n    };\n\n    /*address: {\n      depository: \"\",\n      name: \"\",\n      floor: \"\",\n      phone: \"\",\n      streetAdress: \"\",\n      region: \"\",\n      postalCode: \"\",\n      geo: {\n        lat: 0,\n        lng: 0,\n      }\n    },\n    catalog: \"\",\n    description: \"\",\n    name: \"\"\n  }*/\n    json = json || {};\n    Object.assign(this, Utils.merge(defaultShop, json));\n    this.account.tva = this.account.tva || {};\n    this.available.weekdays = this.available.weekdays || [];\n    this.address = this.address || {geo: {lat: 0, lng: 0}} as any;\n  }\n\n}\n\n@Injectable()\nexport class ShopService {\n  //\n  // common multicast to update UX when one shop on the list is modified\n\n  public  shop$: ReplaySubject<Shop>;\n  public  shops$: BehaviorSubject<Shop[]> | ReplaySubject<Shop[]>;\n\n  private config: any;\n  private headers: HttpHeaders;\n  private cache = {\n    list: [],\n    map: new Map<string, Shop>()\n  };\n\n\n  constructor(\n    private http: HttpClient\n  ) {\n    this.config = ConfigService.defaultConfig;\n    this.headers = new HttpHeaders({\n      'Content-Type': 'application/json',\n      'Cache-Control' : 'no-cache',\n      'Pragma' : 'no-cache',\n      'ngsw-bypass':'true',\n      'k-dbg': AnalyticsService.FBP\n    });\n    //\n    // 1 means to keep the last value\n    this.shop$ = new ReplaySubject(1);\n    this.shops$ = new BehaviorSubject<Shop[]>(null);\n    this.cache = {\n      list: [],\n      map: new Map()\n    };\n  }\n\n\n  //\n  // simple cache manager\n  private deleteCache(shop: Shop, propagate?: boolean) {\n    shop.deleted = true;\n    if (this.cache.map[shop.urlpath]) {\n      delete this.cache.map[shop.urlpath];\n    }\n    if (propagate) {this.shop$.next(shop); }\n    return shop;\n  }\n\n  private updateCache(shop: Shop, propagate?: boolean): Shop {\n    if (!this.cache.map[shop.urlpath]) {\n      this.cache.map[shop.urlpath] = new Shop(shop);\n      return this.cache.map[shop.urlpath];\n    }\n    //\n    // update existing entry\n    Object.assign(this.cache.map[shop.urlpath], shop);\n    if(propagate){this.shop$.next(shop); }\n    return this.cache.map[shop.urlpath];\n  }\n\n\n  //\n  // REST api wrapper\n  //\n\n  query(filter?: any): Observable<Shop[]> {\n    filter = filter || {};\n    filter.rnd = Date.now();\n    return this.http.get<Shop[]>(this.config.API_SERVER + '/v1/shops', {\n      headers: this.headers,\n      withCredentials: (configCors()),\n      params: filter,\n    }).pipe(\n      catchError(err => from([])),\n      map(shops => shops.map(this.updateCache.bind(this)) as Shop[]),\n      tap(shops => {\n        this.shops$.next(shops);\n      })\n    );\n}\n\n  findByCatalog(cat, filter): Observable<Shop[]> {\n    return this.http.get<Shop[]>(this.config.API_SERVER + '/v1/shops/category/' + cat, {\n      headers: this.headers,\n      withCredentials: (configCors())\n    }).pipe(\n      map(shops => shops.map(this.updateCache.bind(this)) as Shop[]),\n      tap(shops => {\n        this.shops$.next(shops);\n      })\n    );\n  }\n\n  //\n  // get a single shop\n  get(urlpath): Observable<Shop> {\n    return this.http.get<Shop>(this.config.API_SERVER + '/v1/shops/' + urlpath, {\n      headers: this.headers,\n      withCredentials: (configCors())\n    }).pipe(\n      map(shop => this.updateCache(shop, true))\n    );\n  }\n\n  //\n  // TODO: what is it used for ?\n  publish(shop: Shop): Observable<Shop> {\n    return this.http.get<Shop>(this.config.API_SERVER + '/v1/shops/' + shop.urlpath + '/status', {\n      headers: this.headers,\n      withCredentials: (configCors())\n    }).pipe(\n      map(shop => this.updateCache(shop, true))\n    );\n  }\n\n  //\n  // send question to a shop\n  ask(shop: Shop, content: string): Observable<any> {\n    return this.http.post<Shop>(this.config.API_SERVER + '/v1/shops/' + shop.urlpath + '/status',\n      {\n        content: content\n      }, {\n        headers: this.headers,\n        withCredentials: (configCors())\n      });\n    }\n\n  save(shop: Shop): Observable<Shop> {\n    delete shop['__v'];\n    return this.http.post<Shop>(this.config.API_SERVER + '/v1/shops/' + shop.urlpath, shop, {\n      headers: this.headers,\n      withCredentials: (configCors())\n    }).pipe(\n      map(shop => this.updateCache(shop, true))\n    );\n  }\n\n  //\n  // create a new shop for the current user\n  // TODO: user must reload his profile when shop is modified\n  create(shop: Shop): Observable<Shop> {\n    return this.http.post<Shop>(this.config.API_SERVER + '/v1/shops', shop, {\n      headers: this.headers,\n      withCredentials: (configCors())\n    }).pipe(\n      map(shop => this.updateCache(shop, true))\n    );\n  }\n\n  //\n  // delete shop for the current user\n  // TODO: user must reload his profile when shop is modified\n  remove(shop: Shop, password: string): Observable<any> {\n    const passwordJson = { \"password\": password };\n    return this.http.put<Shop>(this.config.API_SERVER + '/v1/shops/' + shop.urlpath, passwordJson, {\n      headers: this.headers,\n      withCredentials: (configCors()),\n    }).pipe(\n      map(shop => this.deleteCache(shop, true))\n    );\n}\n\n}\n","\n// TODO Enum are build from available Data on config!!??\n// var EnumFinancialStatus=config.shared.order.financialstatus;\nexport enum EnumFinancialStatus {\n  pending, authorized, partially_paid, invoice, paid, partially_refunded, refunded, voided\n};\n\n// var EnumOrderStatus    =config.shared.order.status;\nexport enum EnumFulfillments {\n  failure, created, reserved, partial, fulfilled\n};\n\n// var EnumOrderIssue     =config.shared.issue.code;\nexport enum EnumOrderIssue {\n  issue_no_issue = \"issue_no_issue\", \n  issue_logistic = \"issue_logistic\",\n  issue_missing_client_id = \"issue_missing_client_id\",\n  issue_missing_product = \"issue_missing_product\", \n  issue_missing_product_danger = \"issue_missing_product_danger\", \n  issue_wrong_product_quality = \"issue_wrong_product_quality\",\n  issue_wrong_packing = \"issue_wrong_packing\"\n}\n\n\n// var EnumCancelReason   =config.shared.order.cancelreason;\nexport enum EnumCancelReason {\n  customer, fraud, inventory, system, timeout, other\n}\n\nexport enum EnumShippingMode {\n  grouped\n}\n","import {\n  EnumCancelReason,\n  EnumFinancialStatus,\n  EnumFulfillments,\n  EnumOrderIssue,\n  EnumShippingMode\n} from './order.enum';\n\n//\n// load es5 hooks\nimport '../es5';\n\nimport { Utils } from '../util';\n\n//\n// get global configuration\nimport { config } from '../config';\n\nimport { User } from '../user.service';\n\n\n//\n// Define an item of this order\nexport interface OrderItem {\n  sku: number;\n  title: string;\n  hub: string;\n  category: string;\n  bundle: boolean;\n\n  //\n  // for subscription\n  frequency?: string;\n\n  //\n  // customer quantity\n  quantity: number;\n\n  //\n  // given price\n  price: number;\n  part: string;\n\n  //\n  // thumbnail\n  thumb?: string;\n\n  //\n  // real price, maximum +/- 10% of given price\n  finalprice: number;\n\n  //\n  // customer note\n  note?: string;\n  audio?: string;\n  audioType?:string;\n\n  //\n  // product variation is not yet implemented\n  variant?: {\n    title: string;\n  };\n\n  /* where is the product now? */\n  fulfillment: {\n    refunded?: boolean;\n    request: string; // string|EnumOrderIssue;\n    issue: string; // string|EnumOrderIssue;\n    status: string; // string|EnumFulfillments;\n    shipping: string; // string|EnumShippingMode;\n    note?: string;\n    //\n    // date/time for the first activity is saved\n    timestamp: Date;\n  };\n  vendor: string;\n}\n\nexport interface Customer {\n    id:number;\n    displayName?: string;\n    phone: string;\n    email: string;\n    plan: string;\n    orders: number;\n    errors: number;\n    latestErrors: number;\n    rating: number;\n    profile: string;\n}\n\nexport interface OrderAddress{\n  type:'order'|string,\n  parent: number,\n  when: Date,\n  lastMinute?: boolean, // ✅ Flag commande jour même\n  hours: number,\n  name: string,\n  note?: string,\n  streetAdress: string,\n  floor: string,\n  postalCode: string,\n  region: string,\n  geo?: { // geo is not mandatory\n    lat: number,\n    lng: number\n  },\n  shipped?: boolean,\n  shopper?: string,\n  shopper_time?: string,\n  priority?: number,\n  position?: number,\n  deposit?: boolean,\n  bags?: number,\n  estimated?: number\n}\n\nexport class Order {\n\n  /** HUB identifier */\n  hub: string;\n\n  /** order identifier */\n  oid: number;\n\n  /* compute a rank for the set of orders to be shipped together */\n  rank: number;\n\n  created: Date;\n  closed?: Date;\n\n  /* customer evaluation */\n  score: number;\n\n  /* full customer details */\n  customer: any|Customer;\n  /* DEPRECTATED customer email */\n  //email?: string;\n\n  /* order canceled reason and dates */\n  cancel?: {\n    reason: string; // string|EnumCancelReason;\n    when: Date;\n  };\n\n  /* discount_code:{type: String}, */\n  /* cart_token:{type: String}, */\n\n  payment: {\n    alias: string;\n    number: string;\n    expiry: string;\n    issuer: string;\n    status: string; // string|EnumFinancialStatus;\n    handle?: string;\n    provider?: string;\n    subscription?: string;\n    logs: string[],\n    customer_credit:number; // paid from customer.balance\n    fees: {\n      charge: number;\n      shipping: number;\n    },\n\n    /* for security reason transaction data are encrypted */\n    transaction?: string;\n  };\n\n\n  fulfillments: {\n    status: string; // string|EnumFulfillments;\n  };\n\n  items: OrderItem[];\n\n  vendors: [{\n    //\n    // only displayed for owner and admin\n    fees?: number,\n    slug: string,\n    name: string,\n    fullName: string;\n    address: string,\n    address2: string,\n    geo: {\n      lat: number,\n      lng: number\n    },\n    collected: boolean,\n    collected_timestamp: Date,\n    gift_timestamp:Date,\n\n    //\n    // you can see values only when uid is order.owner, shop.owner, or admin\n    // amount & threshold & finalAmount & are saved for security reason\n    discount: {\n      amount: number,\n      threshold: number,\n      finalAmount: number\n    }\n  }];\n\n  shipping: OrderAddress;\n\n  //\n  // errors[] => [] for items\n  // errors.missingIntent => for SCA\n  errors?: any[] | any;\n\n  constructor(json?: any) {\n    Order.fromJSON(this, json);\n  }\n\n  static fromJSON(dest:Order, json: any) {\n    /* default values */\n    const defaultOrder = {\n      customer: {},\n      payment: {},\n      fulfillments: {},\n      cancel: {},\n      items: [],\n      vendors: [],\n      shipping: {}\n    };\n\n    Object.assign(dest, defaultOrder, json || {});\n    if(!json) return;\n\n    //\n    // case of Order errors\n    if (dest.errors) {\n      return;\n    }\n    const phoneNumber = dest.customer.phoneNumbers || [];\n    dest.customer.phone = dest.customer.phone|| phoneNumber[0]?.number||'';\n    if(!dest.customer.email) {\n      dest.customer.email = json.email;\n    }\n\n    dest.shipping.when = new Date(dest.shipping.when);\n    dest.created = new Date(dest.created);\n    dest.closed = dest.closed?new Date(dest.closed):undefined;\n\n    // boolean stuffs\n    dest.shipping.deposit = (String(dest.shipping.deposit) == 'true');\n    dest.shipping.shipped = (String(dest.shipping.shipped) == 'true');\n    dest.shipping.lastMinute = (String(dest.shipping.lastMinute) == 'true'); // ✅ Normaliser lastMinute\n\n\n    dest.vendors.forEach((vendor) => {\n      vendor.collected = (String(vendor.collected) == 'true');\n    });\n\n    dest.items.forEach((item) => {\n      item.bundle = (String(item.bundle) == 'true');\n      item.fulfillment.refunded = (String(item.fulfillment.refunded) == 'true');\n      item.frequency = (String(item.frequency) == 'false') ? undefined : item.frequency;\n    });\n\n\n    //\n    // Normalized HUB\n    dest.hub = dest.hub['_id'] || dest.hub;\n\n    //\n    // default order position\n    dest.shipping.position = dest.shipping.position || parseInt(dest.shipping.postalCode, 10) * 10;\n    return dest;\n  }\n\n\n\n\n  //\n  // the next shipping day\n  static nextShippingDay(user?: User, hub?:any) {\n    const potential = config.potentialShippingDay(hub);\n    const currentHub   = (hub)? hub:config.shared.hub;\n    const next = potential.dayToDates(\n      currentHub.weekdays\n    );\n\n    //\n    // remove complete shipping days for the current HUB\n    // its a weak constraint\n    const currentRanks = config.shared.currentRanks[currentHub.slug] || {};\n    const premiumLimit = (user && user.isPremium()) ? (config.shared.order.premiumLimit || 0) : 0;\n    const currentLimit = (config.shared.hub.currentLimit || 1000) + premiumLimit;\n\n    for (let i = next.length - 1; i >= 0; i--) {\n      if (currentRanks[next[i].getDay()] >= currentLimit) {\n        next.splice(i, 1);\n      }\n    }\n\n    //\n    // no closed date\n    // FIXME remove main hub constraint\n    if (!currentHub.noshipping || !currentHub.noshipping.length) {\n      return next[0];\n    }\n\n    // there is cloased dates\n    // next contains the potentials shipping days,\n    // we must return the first date available for shipping\n    for (var j = 0; j < next.length; j++) {\n      for (var i = 0; i < currentHub.noshipping.length; i++) {\n        const noshipping = currentHub.noshipping[i];\n        if (!next[j].in(noshipping.from, noshipping.to)) return next[j];\n      }\n    }\n\n    // else\n    // after 7 days we cant order anyway!\n    return;\n  }\n\n  //\n  // a full week of available shipping days\n  // limit to nb days (default is <7)\n  static fullWeekShippingDays(hub?:any) {\n    const currentHub  = (hub)? hub:config.shared.hub;\n\n    let next = config.potentialShippingWeek(hub),\n        lst:any[] = [],\n        today = new Date();\n\n    //\n    // default date limit is defined by\n    let limit = currentHub.uncapturedTimeLimit || 7;\n\n    limit = today.plusDays(limit + 0).getTime();\n\n    function format(lst) {\n      //\n      // sorting dates\n      lst = lst.sort(function (a, b) {\n        return a.getTime() - b.getTime();\n      });\n\n      //\n      // limit length of a week\n      return lst.filter(function (date) {\n        return (!limit || date.getTime() < limit);\n      });\n\n    }\n\n\n    //\n    // no closed date\n    if (!currentHub.noshipping || !currentHub.noshipping.length) {\n      return format(next);\n    }\n\n    // there is cloased dates\n    // next contains the potentials shipping days,\n    // we must return the first date available for shipping\n    next.forEach(function (shippingday) {\n      let find = currentHub.noshipping.find(noshipping => shippingday.in(noshipping.from, noshipping.to))\n      if (!find) lst.push(shippingday)\n    });\n\n\n\n\n    return format(lst);\n  }\n\n\n\n\n  //\n  // get amount of discount for this order\n  getTotalDiscount() {\n    let amount = 0;\n\n\n    this.vendors.forEach(function(vendor) {\n      amount += (vendor.discount && vendor.discount.finalAmount || 0);\n    });\n\n    return amount;\n  }\n\n\n  getSubTotal(options?) {\n    options = options || {};\n    let total = 0.0;\n    if (this.items) {\n      this.items.forEach((item) => {\n        //\n        // item should not be failure (fulfillment)\n        if (item.fulfillment.status !== EnumFulfillments[EnumFulfillments.failure]) {\n          total += item.finalprice;\n        }\n      });\n    }\n\n    //\n    // add karibou fees\n    if (!options.withoutCharge) {\n      total += this.payment.fees.charge * total;\n    }\n\n    return Utils.roundAmount(total);\n  }\n\n\n  //\n  // stotal = items + shipping - total discount\n  //  total = stotal + stotal*payment.fees\n  // WARNNG -- WARNNG -- WARNNG -- edit in all places\n  getTotalPrice(factor?: number) {\n    let total = this.getSubTotal();\n\n    // before the payment fees!\n    // add shipping fees\n    total += this.getShippingPrice();\n\n    //\n    // remove discout offer by shop\n    total -= this.getTotalDiscount();\n\n    // add mul factor\n    if (factor) { total *= factor; }\n\n    return Utils.roundAmount(total);\n  }\n\n  getTotalPriceForBill() {\n    return this.getTotalPrice() - (this.payment.customer_credit||0);\n  }\n\n  getShippingPrice() {\n\n    // check if value exist, (after creation)\n    if (this.payment.fees &&\n      this.payment.fees.shipping >=0) {\n      return this.payment.fees.shipping;\n    }\n\n    //\n    // this should be always true, if fulfillment exist then shipping is stored\n    // assert(!this.fulfillment)\n    throw new Error('Not implemented');\n    // return cart.shipping();\n\n  }\n\n  getOriginPrice(addFees?: boolean) {\n    let total = 0.0;\n    if (this.items) {\n      this.items.forEach((item) => {\n        //\n        // item should not be failure (fulfillment)\n        if (item.fulfillment.status !== EnumFulfillments[EnumFulfillments.failure]) {\n          total += (item.price * item.quantity);\n        }\n      });\n    }\n    if (addFees) {\n      // before the payment fees!\n      // add shipping fees (10CHF)\n      total += this.getShippingPrice();\n\n      //\n      // add gateway fees\n      total += this.payment.fees.charge * total;\n    }\n\n    return Utils.roundAmount(total);\n  }\n\n\n  getPriceDistance(item) {\n    let original = 0.0, validated = 0.0;\n    if (!item && this.items) {\n      this.items.forEach(function(item) {\n        //\n        // item should not be failure (fulfillment)\n        if (item.fulfillment.status !== EnumFulfillments[EnumFulfillments.failure]) {\n          original += (item.price * item.quantity);\n          validated += (item.finalprice);\n        }\n      });\n    } else if (item) {\n      original = (item.price * item.quantity);\n      validated = parseFloat(item.finalprice);\n    }\n\n    return ((validated / original * 100) - 100);\n  }\n\n\n  getShippingLabels() {\n    throw new Error('Not implemented');\n    //  var when=new Date(this.shipping.when);\n    //  var time=cart.shippingTimeLabel(this.shipping.hours);\n    //  var date=moment(when).format('dddd DD MMM YYYY', 'fr');\n\n    //  return {date:date,time:time};\n  }\n\n  getProgress() {\n    //\n    // end == 100%\n    let end = this.items.length;\n    let progress = 0;\n    //\n    // failure, create, partial, fulfilled\n    if ([EnumFulfillments[EnumFulfillments.fulfilled], EnumFulfillments[EnumFulfillments.failure]].indexOf(this.fulfillments.status) !== -1) {\n      return 100.00;\n    }\n\n    //\n    // pending, paid, voided, refunded\n    if (this.payment.status === EnumFinancialStatus[EnumFinancialStatus.pending]) {\n      return (progress / end * 100.00);\n    }\n    //\n    // progress order items\n    for (let i in this.items) {\n      if ([EnumFulfillments[EnumFulfillments.fulfilled], EnumFulfillments[EnumFulfillments.failure]].indexOf(this.items[i].fulfillment.status) !== -1) {\n        progress++;\n      }\n    }\n    return (progress / end * 100.00);\n  }\n\n  getFulfilledIssue() {\n    const issue = [];\n    this.items.forEach((item: OrderItem) => {\n      if (item.fulfillment.issue &&\n        item.fulfillment.issue !== EnumOrderIssue[EnumOrderIssue.issue_no_issue]) {\n          issue.push(item);\n      }\n    });\n    return issue;\n  }\n\n  getFulfilledFailure() {\n    let failure = 0;\n    for (let i in this.items) {\n      if ([EnumFulfillments[EnumFulfillments.failure]].indexOf(this.items[i].fulfillment.status) !== -1) {\n        failure++;\n      }\n    }\n    // count failure on initial order\n    return failure;\n  }\n\n  getFulfilledStats() {\n    let failure = this.getFulfilledStats();\n    // count failure on initial order\n    return failure + '/' + (this.items.length);\n\n  }\n  getFulfilledProgress() {\n    let progress = 0;\n    for (let i in this.items) {\n      if ([EnumFulfillments[EnumFulfillments.failure], EnumFulfillments[EnumFulfillments.fulfilled]].indexOf(this.items[i].fulfillment.status) !== -1) {\n        progress++;\n      }\n    }\n    return progress;\n\n  }\n\n  // getTitle(){\n\n  //   //\n  //   // failure,\n  //   if(this.fulfillments.status===EnumFulfillments.failure){\n  //     return \"Commande annulée\";\n  //   }\n\n  //   //\n  //   // pending, paid, voided, refunded\n  //   if(this.payment.status===EnumFinancialStatus.pending){\n  //     return \"Commande en attente de paiement\";\n  //   }\n\n  //   //\n  //   // partial\n  //   if(this.fulfillments.status===EnumFulfillments.partial){\n  //     return \"La commande est en attente de traitement\";\n  //   }\n  //   var labels=this.getShippingLabels();\n  //   return \"Livrée le \"+labels.date +' entre '+labels.time;\n\n  // }\n\n}\n","import { HttpClient, HttpHeaders } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { ConfigService } from '../config.service';\n\nimport { Observable , of, ReplaySubject, throwError } from 'rxjs';\nimport { map, tap, catchError, shareReplay, debounceTime } from 'rxjs/operators';\n\nimport {\n  EnumCancelReason,\n  EnumFulfillments,\n  EnumOrderIssue\n} from './order.enum';\n\nimport { Order, OrderItem } from './order';\nimport { ShippingAddress, UserCard } from '../user.service';\nimport { CartItem } from '../cart.service';\nimport { AnalyticsService } from '../metrics.service';\n\n\nexport interface OrderCustomerInvoices {\n  month:number;\n  year:number;\n  transfers:any[];\n  paids:any[];\n  invoices:any[];\n}\n\n\n\n@Injectable()\nexport class OrderService {\n  private ordersSrc$: ReplaySubject<Order[]>;\n  public order$: ReplaySubject<Order>;\n  public orders$ : Observable<Order[]>;\n\n  // TODO make observable content !!\n  // TODO orders depends on user and shops\n  config: any;\n  headers: HttpHeaders;\n\n  constructor(\n    private http: HttpClient,\n    private configSrv: ConfigService\n  ) {\n    //\n    // TODO wait for observale!\n    this.config = ConfigService.defaultConfig;\n    this.headers = new HttpHeaders({\n      'Content-Type': 'application/json',\n      'Cache-Control' : 'no-cache',\n      'Pragma' : 'no-cache',\n      'ngsw-bypass':'true',\n      'k-dbg': AnalyticsService.FBP\n    });\n    this.cache = {\n      list: [], map: new Map()\n    };\n\n    this.order$ = new ReplaySubject(1);\n    this.ordersSrc$ = new ReplaySubject<Order[]>();\n    this.orders$ = this.ordersSrc$.pipe(debounceTime(100),shareReplay(1));\n\n  }\n\n\n  //\n  // common cache functions\n  private cache: {\n    list: Order[];\n    map: Map<number, Order>; // key is a slug\n  };\n\n  private updateCache(order: Order) {\n    //\n    // avoid update cache on error\n    if(order.errors) {\n      return order;\n    }\n    if (!this.cache.map.has(order.oid)) {\n      this.cache.map.set(order.oid, new Order(order));\n      return this.cache.map.get(order.oid);\n    }\n    // FIXME check if new Order(...) is mandatory at this point ???\n    const incache = this.cache.map.get(order.oid);\n\n    incache.vendors = [] as any;\n    incache.shipping = {} as any;\n    incache.payment = {} as any;\n    Order.fromJSON(incache, order);\n\n    //\n    // update only modified items (for admin only)\n    // DEPRECATED\n    if(order.items && order.items.length) {\n      incache.items.forEach(item =>  {\n        const updated = order.items.find(elem => elem.sku == item.sku && item.vendor == elem.vendor);\n        if(!updated) {\n          return;\n        }\n        Object.assign(item,updated);\n      });\n      order.items = incache.items;\n    }\n    return Object.assign(incache, (order));\n  }\n\n  private deleteCache(order: Order) {\n    const incache = this.cache.map[order.oid];\n    if (this.cache.map[order.oid]) {\n      delete this.cache.map[order.oid];\n    }\n    return incache;\n  }\n\n\n\n  //\n  // customer order services\n  customerInvoices():Observable<OrderCustomerInvoices[]> {\n    return this.http.get<OrderCustomerInvoices[]>(this.config.API_SERVER + '/v1/orders/invoices', {\n      headers: this.headers,\n      withCredentials: true\n    });\n\n  }\n\n\n  // find one order by oid\n  get(oid: number): Observable<Order> {\n    return this.http.get<Order>(this.config.API_SERVER + '/v1/orders/' + oid, {\n      headers: this.headers,\n      withCredentials: true\n    }).pipe(\n      map(order => this.updateCache(order))\n    );\n  }\n  //\n  // create a new order\n  // role:client\n  // app.post('/v1/orders', auth.ensureUserValid, orders.ensureValidAlias, queued(orders.create));\n  create(hub: string, shipping: ShippingAddress, items: CartItem[]|any[], payment: UserCard): Observable<Order> {\n    // backend.$order.save({shipping:shipping,items:items,payment:payment}, function() {\n    return this.http.post<Order>(this.config.API_SERVER + '/v1/orders', { hub, shipping, items, payment }, {\n      headers: this.headers,\n      withCredentials: true\n    }).pipe(\n      map(order => this.updateCache(order))\n    );\n  }\n\n  //\n  // mail [all|specified] vendors for orders\n  // role:admin|shop\n  // app.post('/v1/orders/:shopname/email',shops.ensureOwnerOrAdmin,orders.informShopToOrders);\n  // app.post('/v1/orders/shops/email',shops.ensureAuthenticated,orders.informShopToOrders);\n  informShopToOrders(shop: string, when: Date, message?: string): Observable<any> {\n    shop = shop || 'shops'; // specified shop or all shops\n    // return this.chain(backend.$order.inform({action:shop,id:'email'},{when:when,fulfillments:fulfillment}).$promise);\n    return this.http.post<any>(this.config.API_SERVER + '/v1/orders/' + shop + '/email', { when, content: message }, {\n      headers: this.headers,\n      withCredentials: true\n    });\n\n  }\n\n  // remove this order\n  // role:admin only\n  // TODO should be password protected\n  // app.post('/v1/orders/:oid/remove', auth.ensureAdmin, orders.remove);\n  remove(order: Order): Observable<any> {\n    // return this.chain(backend.$order.save({action:this.oid,id:'remove'}).$promise);\n    return this.http.post<Order>(this.config.API_SERVER + '/v1/orders/' + order.oid + '/remove', null, {\n      headers: this.headers,\n      withCredentials: true\n    }).pipe(\n      map(order => this.deleteCache(order))\n    );\n  }\n\n  // capture this order\n  // role:admin only\n  // DEPRECATED opts => reason:'invoice'\n  // app.post('/v1/orders/:oid/capture', auth.ensureAdmin, queued(orders.capture));\n  capture(order: Order, opts?: any): Observable<any> {\n    opts = opts || {};\n    return this.http.post<Order>(this.config.API_SERVER + '/v1/orders/' + order.oid + '/capture', opts, {\n      headers: this.headers,\n      withCredentials: true\n    }).pipe(\n      map(order => this.updateCache(order))\n    );\n  }\n\n  // refund an order item\n  // role:admin or shop (when partial)\n  // app.post('/v1/orders/:oid/refund', auth.ensureAdmin, queued(orders.refund));\n  refund(order: Order, item: OrderItem): Observable<Order> {\n    // return this.chain(backend.$order.save({action:this.oid,id:'refund'}).$promise);\n    const params = Object.assign({}, item);\n    params.finalprice = item.finalprice;\n    return this.http.post<Order>(this.config.API_SERVER + '/v1/orders/' + order.oid + '/refund', params, {\n      headers: this.headers,\n      withCredentials: true\n    }).pipe(\n      map(order => this.updateCache(order))\n    );\n  }\n\n\n  // refund an order HUB\n  // role:admin or shop (when partial)\n  // app.post('/v1/orders/:oid/hub/refund', auth.ensureAdmin, queued(orders.hub_refund));\n  hub_refund(order: Order, amount: number): Observable<Order> {\n    // return this.chain(backend.$order.save({action:this.oid,id:'refund'}).$promise);\n    return this.http.post<Order>(this.config.API_SERVER + '/v1/orders/' + order.oid + '/hub/refund', { amount }, {\n      headers: this.headers,\n      withCredentials: true\n    }).pipe(\n      map(order => this.updateCache(order))\n    );\n  }\n\n  // order can be canceled\n  // -> when user cancel an order reason is always cancel)\n  // -> when admin cancel an order reason can be \"customer\", \"fraud\", \"inventory\", \"system\",\"timeout\",\"other\"\n  // role: admin|user\n  // app.post('/v1/orders/:oid/cancel', orders.ensureOwnerOrAdmin, queued(orders.cancel));\n  cancelWithReason(order: Order, reason: EnumCancelReason): Observable<Order> {\n    // return this.chain(backend.$order.save({action:this.oid,id:'cancel'},{reason:reason}).$promise);\n    return this.http.post<Order>(this.config.API_SERVER + '/v1/orders/' + order.oid + '/cancel', { reason: EnumCancelReason[reason] }, {\n      headers: this.headers,\n      withCredentials: true\n    }).pipe(\n      map(order => this.updateCache(order))\n    );\n  }\n\n  //\n  // update item for one order (shop preparation process)\n  // role:shop:operator:admin\n  updateItem(order: Order, items, fulfillment: EnumFulfillments): Observable<Order> {\n    const tosave = items.map(item => {\n      const elem = Object.assign({}, item);\n      elem.finalprice = parseFloat(item.finalprice);\n      elem.fulfillment.status = EnumFulfillments[fulfillment];\n      return elem;\n    });\n\n    return this.http.post<Order>(this.config.API_SERVER + '/v1/orders/' + order.oid + '/items', tosave, {\n      headers: this.headers,\n      withCredentials: true\n    }).pipe(\n      // FIXME retryWhen dont throw Error after the 3\n      // retryWhen(errors => errors.pipe(delay(1000), take(3), concatMap(err => throwError(err)))),\n      map(order => this.updateCache(order)),\n      tap(order => this.order$.next(order))\n    );\n  }\n\n  // update order with specific issue made by one shop\n  // role:admin\n  // app.post('/v1/orders/:oid/issue', auth.ensureAdmin, orders.updateIssue);\n  updateIssue(order: Order, item, issue: EnumOrderIssue): Observable<Order> {\n    const tosave = Object.assign({}, item);\n    tosave.fulfillment.issue = EnumOrderIssue[issue];\n    return this.http.post<Order>(this.config.API_SERVER + '/v1/orders/' + order.oid + '/issue', [tosave], {\n      headers: this.headers,\n      withCredentials: true\n    }).pipe(\n      map(order => this.updateCache(order)),\n      tap(order => this.order$.next(order))\n    );\n  }\n\n  // update order with specific issue made by one shop\n  // role:owner\n  // app.post('/v1/orders/:oid/issue', auth.ensureAdmin, orders.updateIssue);\n  requestIssue(order: Order, items, score: number, message?: string): Observable<any> {\n    const tosave: any = {\n      score,\n      items: items.map(item => Object.assign({}, item))\n    };\n    //\n    // specify a message\n    if (message) {\n      tosave.message = message;\n    }\n    return this.http.post<any>(this.config.API_SERVER + '/v1/orders/' + order.oid + '/issue/request', tosave, {\n      headers: this.headers,\n      withCredentials: true\n    });\n  }\n\n  // update effective bags for this order\n  // role:logistic\n  // app.post('/v1/orders/:oid/shipping', auth.ensureLogisticOrAdmin, orders.updateShipping);\n  updateBagsCount(order: Order, value: number): Observable<Order> {\n    const status = order.shipping.shipped;\n    return this.http.post<Order>(this.config.API_SERVER + '/v1/orders/' + order.oid + '/shipping', { bags: value, status }, {\n      headers: this.headers,\n      withCredentials: true\n    }).pipe(\n      map(order => this.updateCache(order)),\n      tap(order => this.order$.next(order))\n    );\n  }\n\n\n  // update shipping status (TODO WTF !?)\n  // role:logistic\n  // app.post('/v1/orders/:oid/shipping', auth.ensureLogisticOrAdmin, orders.updateShipping);\n  updateShipping(order: Order, status) {\n    // return this.chain(backend.$order.save({ action: oid, id: 'shipping' }, { amount: status }).$promise);\n    return this.http.post<Order>(this.config.API_SERVER + '/v1/orders/' + order.oid + '/shipping', { amount: status }, {\n      headers: this.headers,\n      withCredentials: true\n    }).pipe(\n      map(order => this.updateCache(order)),\n      tap(order => this.order$.next(order))\n    );\n\n  }\n\n  // update shopper\n  // role:logistic\n  // app.post('/v1/orders/:oid/shipper', auth.ensureLogisticOrAdmin, orders.updateShippingShopper);\n  updateShippingShopper(hub: string, shopper: string, priority: number, when: Date, time: string) {\n    const params = {\n      hub,\n      shopper,\n      priority,\n      time,\n      when\n    };\n    // return this.chain(backend.$order.save({ action: oid, id: 'shipping' }, { amount: status }).$promise);\n    return this.http.post<Order[]>(this.config.API_SERVER + '/v1/orders/shopper', params, {\n      headers: this.headers,\n      withCredentials: true\n    }).pipe(\n      map(orders => orders.map(this.updateCache.bind(this)))\n    );\n\n  }\n\n  // update shopper\n  // role:logistic\n  updateShippingPriority(order: Order, priority: number, position: number) {\n    const params = {\n      priority,\n      position,\n    };\n    // return this.chain(backend.$order.save({ action: oid, id: 'shipping' }, { amount: status }).$promise);\n    return this.http.post<Order>(this.config.API_SERVER + '/v1/orders/' + order.oid + '/priority', params, {\n      headers: this.headers,\n      withCredentials: true\n    }).pipe(\n      map(order => this.updateCache(order)),\n      tap(order => this.order$.next(order))\n    );\n\n  }\n\n  // update fee of shipping\n  // role:admin\n  updateShippingPrice(order, amount) {\n    return this.http.post<Order>(this.config.API_SERVER + '/v1/orders/' + order.oid + '/shipping', { amount }, {\n      headers: this.headers,\n      withCredentials: true\n    }).pipe(\n      map(order => this.updateCache(order)),\n      tap(order => this.order$.next(order))\n    );\n  }\n\n  updateInvoices(oids:number[], amount?: number){\n    return this.http.post<Order>(this.config.API_SERVER + '/v1/orders/invoices/update', {  oids, amount }, {\n      headers: this.headers,\n      withCredentials: true\n    });\n  }\n\n  // validate shop products collect\n  // role:logistic\n  // app.post('/v1/orders/:shopname/collect', auth.ensureLogisticOrAdmin, orders.updateCollect);\n  updateCollect(shopname, status, when, hub?): Observable<Order[]> {\n    // return this.chain(backend.$order.collect({action:shopname,id:'collect'},{status:status,when:when}).$promise);\n    return this.http.post<Order[]>(this.config.API_SERVER + '/v1/orders/' + shopname + '/collect', { status, when, hub }, {\n      headers: this.headers,\n      withCredentials: true\n    }).pipe(\n      map(orders => orders.map(this.updateCache.bind(this)))\n    );\n  }\n\n\n  // /v1/orders/prodcts?skus=111\n  findProductsInPendingOrders(skus){\n    return this.http.get<Order[]>(this.config.API_SERVER + '/v1/orders/products', {\n      params: {skus},\n      headers: this.headers,\n      withCredentials: true\n    }).pipe(catchError(err => of([])));\n  }\n\n  // find all orders by user\n  // role:user\n  // app.get('/v1/orders/users/:id', users.ensureMeOrAdmin, orders.list);\n  findOrdersByUser(user, filter?, _catchError?): Observable<Order[]> {\n    // return this.chainAll(backend.$order.query({id:user.id,action:'users'}).$promise);\n    return this.http.get<Order[]>(this.config.API_SERVER + '/v1/orders/users/' + user.id, {\n      params: filter || {},\n      headers: this.headers,\n      withCredentials: true\n    }).pipe(\n      map(orders => orders.map(this.updateCache.bind(this)) as Order[]),\n      catchError(err => {\n        // FIXME, deprecated?s\n        if(_catchError){\n          return of([]);\n        }\n        return throwError(err)\n      }),\n      tap(orders => {\n        this.ordersSrc$.next(orders);\n      })\n    );\n  }\n\n  // find all order filtered by filter\n  // role:admin?\n  findAllOrders(filter) {\n    // return this.chainAll(backend.$order.query(filter).$promise);\n    const self = this;\n    return this.http.get<Order[]>(this.config.API_SERVER + '/v1/orders', {\n      params: filter || {},\n      headers: this.headers,\n      withCredentials: true\n    }).pipe(\n      map(orders => orders.map(this.updateCache.bind(this)) as Order[]),\n      tap(orders => {\n        this.ordersSrc$.next(orders);\n      })\n    );\n  }\n\n  // find all order for one user shop\n  // role:admin|shop\n  // app.get('/v1/orders/shops/:shopname', shops.ensureOwnerOrAdmin, orders.listByShop);\n  findOrdersByShop(shop, filter): Observable<Order[]> {\n    shop = (shop) ? ('/' + shop.urlpath) : '';\n    return this.http.get<Order[]>(this.config.API_SERVER + '/v1/orders/shops' + shop, {\n      params: filter,\n      headers: this.headers,\n      withCredentials: true\n    }).pipe(\n      map(orders => orders.map(this.updateCache.bind(this)))\n    );\n  }\n\n  // find all repport\n  // role:admin:operator:shop\n  findRepportForShop(filter): Observable<any> {\n    const now = new Date();\n    const month = now.getMonth() + 1;\n    const year = now.getFullYear();\n    // let params = Object.assign({}, { month: now.getMonth() + 1, year: now.getFullYear() }, filter || {});\n    return this.http.get<Order[]>(this.config.API_SERVER + '/v1/orders/invoices/shops/' + month + '/' + year, {\n      params: filter,\n      headers: this.headers,\n      withCredentials: true\n    });\n  }\n\n}\n","import { Injectable } from '@angular/core';\nimport { Resolve, ActivatedRouteSnapshot } from '@angular/router';\n\nimport { Config } from './config';\nimport { ConfigService } from './config.service';\n\nimport { User, UserService } from './user.service';\nimport { CategoryService, Category } from './category.service';\nimport { Shop, ShopService } from './shop.service';\n\nimport { Observable, merge, combineLatest, throwError as _throw, ReplaySubject, of } from 'rxjs';\n\nimport { catchError, flatMap, map, publishReplay, refCount, filter, mergeMap, switchMap, tap, skip, startWith, take } from 'rxjs/operators';\nimport { CartService, CartState } from './cart.service';\nimport { OrderService } from './order/order.service';\nimport { Order } from './order/order';\n\n//\n// Types pour LoaderService\nexport interface LoaderCoreData {\n  config?: Config;\n  user?: User;\n  state?: CartState;\n  categories?: Category[];\n  shops?: Shop[];\n  orders?: Order[];\n  // ✅ TIMESTAMP UNIQUE pour cache intelligent\n  timestamp?: number;\n}\n\n// Tuple pour readyWithStore - seuls config et user sont obligatoires\nexport type LoaderData = [Config, User, Category[]?, Shop[]?, Order[]?, Error?];\n\n\n//\n// manage the first requests needed when bootstrapping the application. Used by the components.\n@Injectable()\nexport class LoaderService {\n\n  config$: Observable<Config>;\n\n  // a BehaviorSubject can cache the last emited value so clients subscribing later can access the previously emitted data\n  // private loader: BehaviorSubject<[Config, User]> = new BehaviorSubject<[Config, User]>([null,null]);\n  //\n  // Use better implementation\n  // - http://jsbin.com/vapiroz/1/edit?js,console\n  // DEPRECATED\n  // private loader: Observable<any>;\n\n\n  private latestCoreData: LoaderCoreData = {};\n  private error: any;\n  private preload: {\n    categories: boolean;\n    shops: boolean;\n    orders: number;\n  };\n\n\n\n  constructor(\n    private $config: ConfigService,\n    private $user: UserService,\n    private $category: CategoryService,\n    private $cart: CartService,\n    private $shop: ShopService,\n    private $order: OrderService\n  ) {\n\n    //\n    // create a multicast Observable with the caching property of BehaviorSubject (publishbehavior)\n    // every subscribing component will be connected to the same request and get the last item received\n    // this.loader = new ReplaySubject<any[]>(1)\n    //   .flatMap(this.preloader.bind(this));\n\n    this.preload = {\n      categories: (ConfigService.defaultConfig.loader.indexOf('categories') > -1),\n      shops: (ConfigService.defaultConfig.loader.indexOf('shops') > -1),\n      orders: ConfigService.defaultConfig.preloadOrders\n    };\n\n\n\n\n    //\n    // install config obs\n    // DEPRECATED\n    // this.config$ = this.$config.get();\n\n    // this.loader = this.config$.pipe(\n    //   mergeMap(this.preloader.bind(this)),\n    //   //\n    //   // transform observable to ConnectableObservable (multicasting)\n    //   publishReplay(1),\n    //   //\n    //   // used to auto-connect to the source when there is >= 1 subscribers\n    //   refCount(),\n    //   catchError(err => {\n    //     this.error = err;\n    //     console.log('--- LOAD ERR', err);\n    //     return _throw(err);\n    //   })\n    // );\n  }\n\n  getError() {\n    return this.error;\n  }\n\n\n\n  /** @deprecated */\n  private preloader(config: Config) {\n    const me$ = this.$user.me();\n\n    //\n    // preload cats\n    if (this.preload.categories) {\n      this.$category.categories$ = new ReplaySubject<Category[]>();\n      this.$category.select().subscribe();\n      // this.$category.select().subscribe(()=>({}),error => {\n      //   console.log('--- DBG loader.category (1)',error.error);\n      //   console.log('--- DBG loader.category (2)',error);\n      // });\n    }\n\n    //\n    // in case of preload shops, shops$ should block\n    if (this.preload.shops) {\n      this.$shop.shops$ = new ReplaySubject<Shop[]>();\n      this.$shop.query().subscribe();\n    }\n\n    //\n    // get last orders\n    const catchError = true;\n    this.$order.findOrdersByUser({id:1},{limit:(this.preload.orders)},catchError).subscribe();\n    // let me$=merge(this.$user.me(),this.$user.user$);\n    const loaders: any[] = [\n      this.$config.config$,\n      me$,\n      this.$category.categories$,\n      this.$shop.shops$,\n      this.$order.orders$\n    ];\n\n    //\n    // combineLatest to get array with last item of each when one emits an item\n    // Config, User, Category[], Shop[]\n    return combineLatest(loaders);\n  }\n\n\n\n\n  update(): Observable<Partial<LoaderCoreData>> {\n    return merge(\n      this.$config.config$.pipe(\n        map(config => ({ config })),\n        tap(({ config }) => {\n          // ✅ SYNC: Mettre à jour latestCoreData.config\n          if (this.latestCoreData) {\n            this.latestCoreData.config = config;\n            this.latestCoreData.timestamp = Date.now();\n          }\n        })\n      ),\n      this.$user.user$.pipe(\n        map(user => ({ user })),\n        tap(({ user }) => {\n          // ✅ SYNC: Mettre à jour latestCoreData.user\n          if (this.latestCoreData) {\n            this.latestCoreData.user = user;\n            this.latestCoreData.timestamp = Date.now();\n          }\n        })\n      ),\n      this.$cart.cart$.pipe(\n        map(state => ({ state })),\n        tap(({ state }) => {\n          // ✅ SYNC: Mettre à jour latestCoreData.state\n          if (this.latestCoreData) {\n            this.latestCoreData.state = state;\n            this.latestCoreData.timestamp = Date.now();\n          }\n        })\n      ),\n      this.$shop.shops$.pipe(\n        map(shops => ({ shops })),\n        tap(({ shops }) => {\n          // ✅ SYNC: Mettre à jour latestCoreData.shops\n          if (this.latestCoreData) {\n            this.latestCoreData.shops = shops;\n            this.latestCoreData.timestamp = Date.now();\n          }\n        })\n      ),\n      this.$order.orders$.pipe(\n        map(orders => ({ orders })),\n        tap(({ orders }) => {\n          // ✅ SYNC: Mettre à jour latestCoreData.orders\n          if (this.latestCoreData) {\n            this.latestCoreData.orders = orders;\n            this.latestCoreData.timestamp = Date.now();\n          }\n        })\n      ),\n    );\n  }\n\n  /**\n   * Charge et broadcast config+hub avec tous les services associés\n   * @param hubSlug Slug du hub (optionnel = config par défaut)\n   * @returns Observable LoaderData [Config, User, Category[]?, Shop[]?, Order[]?]\n   */\n  readyWithStore(hubSlug?: string): Observable<LoaderData> {\n\n    // === CAS 1: hubSlug null → config par défaut ===\n    if (!hubSlug) {\n      return this.$config.get().pipe(\n        tap(config => {\n          // ✅ BROADCAST config par défaut\n          this.$config.config$.next(config);\n        }),\n        switchMap(config => this.loadAllServices(config, null))\n      );\n    }\n\n    // === CAS 2: hubSlug existe → config hub-spécifique ===\n    const store = hubSlug;\n\n    return this.$config.get(store).pipe(\n      tap(configWithHub => {\n        // ✅ BROADCAST nouvelle config hub\n        this.$config.config$.next(configWithHub);\n      }),\n      switchMap(configWithHub => this.loadAllServices(configWithHub, store, true))\n    );\n  }\n\n    /**\n   * Charge tous les services selon preload settings\n   * @param config Configuration chargée\n   * @param hubSlug Hub spécifique (null = tous)\n   */\n  private loadAllServices(config: Config, hubSlug?: string, force=false): Observable<LoaderData> {\n    const now = Date.now();\n    const CACHE_TTL = 500; // 500ms comme demandé\n\n    // ✅ CACHE INTELLIGENT: Vérifier timestamp unique\n    const cacheAge = this.latestCoreData.timestamp ? now - this.latestCoreData.timestamp : Infinity;\n    const isCacheValid = cacheAge < CACHE_TTL &&\n                        this.latestCoreData.categories &&\n                        this.latestCoreData.shops &&\n                        this.latestCoreData.orders;\n\n    if (isCacheValid && !force) {\n      console.log(`🚀 LoaderService: Using cache (age: ${cacheAge}ms, TTL: ${CACHE_TTL}ms)`);\n      return of([\n        config,\n        this.latestCoreData.user || new User(),\n        this.latestCoreData.categories,\n        this.latestCoreData.shops,\n        this.latestCoreData.orders\n      ] as LoaderData);\n    }\n\n    console.log(`📊 LoaderService: Fresh load (age: ${cacheAge}ms, force: ${force})`);\n\n    const loaders: Observable<any>[] = [\n      of(config), // Config déjà chargée\n\n      // ✅ CORRECTION CRITIQUE: Restaurer user.me() pour authentification au boot\n      this.$user.me().pipe(\n        tap(user => this.$user.user$.next(user)), // ✅ Broadcast vers user$ pour sync\n        catchError(err => {\n          // ✅ err.status === 401 = utilisateur anonyme (normal)\n          return of(new User()); // Fallback même en cas d'erreur serveur\n        })\n      ), // User OBLIGATOIRE avec fetch API serveur\n    ];\n\n    // ✅ Categories selon hub - FRESH LOAD\n    if (this.preload.categories || force) {\n      this.$category.select().subscribe(); // Trigger reload\n      loaders.push(this.$category.categories$.pipe(\n        filter(categories => categories !== null), // ✅ CLEF: Attendre que les données soient chargées\n        take(1), // ✅ Prendre seulement la première émission réelle\n        catchError(err => {\n          return of([]); // ✅ Continue avec categories vides\n        })\n      ));\n    } else {\n      loaders.push(of([])); // Empty array si pas preload\n    }\n\n    // ✅ Shops selon hub - FRESH LOAD\n    if (this.preload.shops || force) {\n      const query = hubSlug ? {hub: hubSlug} : {};\n      this.$shop.query(query).subscribe(); // Trigger reload (hub-specific ou tous)\n      loaders.push(this.$shop.shops$.pipe(\n        filter(shops => shops !== null), // ✅ CLEF: Attendre que les données soient chargées\n        take(1), // ✅ Prendre seulement la première émission réelle\n        catchError(err => {\n          return of([]); // ✅ Continue avec shops vides\n        })\n      ));\n    } else {\n      loaders.push(of([])); // Empty array si pas preload\n    }\n\n    // ✅ Orders pour ce user - CONDITIONAL LOAD après user.me()\n    if (this.preload.orders || force) {\n      loaders.push(\n        // ✅ CORRECTION CRITIQUE: Charger orders APRÈS user.me() réussi\n        loaders[1].pipe( // loaders[1] = user.me() observable\n          switchMap(user => {\n            if (user && user.isAuthenticated && user.isAuthenticated()) {\n              // ✅ User authentifié: charger ses orders\n              this.$order.findOrdersByUser({id: 1}, {limit: this.preload.orders}).subscribe();\n              return this.$order.orders$.pipe(\n                catchError(err => of([])) // Fallback orders vides\n              );\n            } else {\n              // ✅ User anonyme: pas d'orders\n              return of([]);\n            }\n          }),\n          catchError(err => of([])) // Fallback général\n        )\n      );\n    } else {\n      loaders.push(of([])); // Empty array si pas preload\n    }\n\n    return combineLatest(loaders).pipe(\n      tap(([config, user, categories, shops, orders]) => {\n        // ✅ BROADCAST automatique si services émettent des updates\n        this.setupLatestCoreData(config, user, categories, shops, orders);\n      }),\n      catchError(err => {\n        // Fallback en cas d'erreur critique (ne devrait pas arriver)\n        return of([config, new User(), [], [], [], err] as LoaderData);\n      })\n    ) as Observable<LoaderData>;\n  }\n\n  /**\n   * Configure le broadcasting automatique lors des updates de services\n   */\n  private setupLatestCoreData(config: Config, user: User, categories: Category[], shops: Shop[], orders: Order[]) {\n    this.latestCoreData = {\n      config,\n      user,\n      categories,\n      shops,\n      orders,\n      // ✅ TIMESTAMP UNIQUE pour cache intelligent\n      timestamp: Date.now()\n    };\n  }\n\n  /**\n   * Parse route snapshot data loader pour extraire config, user, categories, shops, orders\n   * @param snapshotData - Données de route.snapshot.data.loader (format LoaderData)\n   * @returns LoaderCoreData avec config, user, categories, shops, orders typés\n   *\n   * @example\n   * ```typescript\n   * // Dans un composant utilisant route data\n   * ngOnInit() {\n   *   const { config, user, categories, shops, orders } =\n   *     LoaderService.parseSnapshotData(this.$route.snapshot.data.loader);\n   *\n   *   if (config && user) {\n   *     this.initializeWithData(config, user);\n   *   }\n   * }\n   * ```\n   */\n  static parseSnapshotData(snapshotData: any): LoaderCoreData {\n    // ✅ VALIDATION: Vérifier que snapshotData est un array de type LoaderData\n    if (!snapshotData || !Array.isArray(snapshotData)) {\n      console.warn('LoaderService.parseSnapshotData: snapshotData invalide ou manquant', snapshotData);\n      return {\n        config: null,\n        user: null,\n        state: null,\n        categories: null,\n        shops: null,\n        orders: null\n      };\n    }\n\n    // ✅ EXTRACTION: Selon format LoaderData = [Config, User, Category[]?, Shop[]?, Order[]?]\n    const [config, user, categories, shops, orders] = snapshotData as LoaderData;\n\n    // ✅ VALIDATION: Config et User sont obligatoires\n    if (!config || !user) {\n      console.warn('LoaderService.parseSnapshotData: config ou user manquant', {\n        config: !!config,\n        user: !!user\n      });\n    }\n\n    // ✅ RETOUR: Objet typé avec toutes les données extraites\n    return {\n      config: config || null,\n      user: user || null,\n      state: null, // parseSnapshotData ne contient pas le state du cart\n      categories: categories || null,\n      shops: shops || null,\n      orders: orders || null,\n      timestamp: Date.now() // ✅ TIMESTAMP pour cache\n    };\n  }\n\n  /**\n   * ✅ TEMPS RÉEL: Récupère les dernières valeurs des Subject\n   *\n   * @returns LoaderCoreData avec toutes les données core actuelles\n   */\n  getLatestCoreData(): LoaderCoreData {\n    return Object.assign({}, this.latestCoreData);\n  }\n\n}\n\n\n\n//\n// activate route only when loader is ready!\n@Injectable()\nexport class LoaderResolve implements Resolve<Promise<any>> {\n  constructor(private $loader: LoaderService) { }\n  resolve(route: ActivatedRouteSnapshot) {\n    return new Promise(resolve => {\n      this.$loader.readyWithStore().subscribe((loader) => {\n        resolve(loader);\n      });\n    });\n  }\n}\n\n//\n// activate route only when loader is ready!\n@Injectable()\nexport class UserResolve implements Resolve<Promise<any>> {\n  constructor(private $loader: LoaderService) { }\n  resolve(route: ActivatedRouteSnapshot) {\n    return new Promise(resolve =>{\n      this.$loader.readyWithStore().subscribe(([config, user]) => {\n        resolve([config, user]);\n      });\n    });\n  }\n}\n","import { HttpClient, HttpHeaders } from '@angular/common/http';\nimport { Injectable, Inject } from '@angular/core';\n\nimport { Config, config, configCors, ConfigKeyStoreEnum } from './config';\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\n\n\nexport class Photo {\n  constructor(json) {\n    \n  }\n  slug:string;\n  url:string;\n}\n\n\n@Injectable()\nexport class PhotoService {\n  private headers: HttpHeaders;\n  public config:any;\n\n  constructor(\n    private http: HttpClient\n  ) {\n    \n\n    this.config = config;\n    this.headers = new HttpHeaders({\n      'Content-Type': 'application/json',\n      'Cache-Control' : 'no-cache',\n      'Pragma' : 'no-cache',\n      'ngsw-bypass':'true'\n    });\n  }\n\n\n  //\n  // load shops photos\n  shops(criteria): Observable<Photo[]> {\n    let params:any={\n      active:criteria.active||false\n    };\n\n    if(criteria.slugs){\n      params.slugs=criteria.slugs;\n    }\n    if(criteria.random){\n      params.random=criteria.random;\n    }\n\n    return this.http.get<Photo[]>(config.API_SERVER + '/v1/shops/photos', {\n      params:params,\n      headers: this.headers,\n      withCredentials: (configCors()),\n    }).pipe(\n      map((photos:any[]) => {\n        return photos;\n      })\n    )\n  }\n\n  //\n  // load shops photos\n  products(criteria): Observable<Photo[]> {\n    let params:any={\n      active:criteria.active||false\n    };\n    \n    if(criteria.skus){\n      params.skus=criteria.skus;\n    }\n    if(criteria.random){\n      params.random=criteria.random;\n    }\n    return this.http.get<Photo[]>(config.API_SERVER + '/v1/products/photos', {\n      params:params,\n      headers: this.headers,\n      withCredentials: (configCors()),\n    }).pipe(\n      map((photos:any[]) => {\n        return photos;\n      })\n    )\n  }\n\n}\n","import { Directive, ElementRef, Input, OnInit } from '@angular/core';\n\nimport { Observable } from 'rxjs';\n\n@Directive({\n  selector: '[bgSrc]'\n})\n\n//\n// https://stackoverflow.com/questions/41274603/observable-of-component-attribute-changes-in-angular2\nexport class bgSrcDirective implements OnInit{\n\n  grandient:string=`linear-gradient(\n    rgba(0, 0, 0, 0.0),\n    rgba(0, 0, 0, 0.5)\n  ),`;\n\n  @Input() bgSmall : string;\n  @Input() bgGradient : boolean;\n  element;\n\n  constructor(\n    private el: ElementRef\n  ) { \n    this.element=this.el.nativeElement;\n  }\n\n  @Input() set bgSrc(url) {\n    //\n    // safe approach\n    if(!url)return;\n    let prefix=(this.bgGradient)?this.grandient:'';\n    if(this.bgSmall) {\n      url+='-/resize/300x/';\n    }else{\n      url+='-/progressive/yes/';\n    }\n    \n    this.element.style.backgroundImage = prefix+\"url(\"+url+\")\";\n\n  }\n\n  ngOnInit(){\n  }\n\n\n}\n","import { Component, ElementRef, EventEmitter, Input, Output, OnInit } from '@angular/core';\n\nimport { Observable } from 'rxjs';\n\n@Component({\n  selector: '[confirm-delete]',\n  template: `\n    <form id=\"passwd-{{id}}\" style=\"'+style+'\" class=\"form-inline prompt-passwd\" validate>\n      <input type=\"password\" class=\"form-control\" placeholder=\"valider avec votre mot de passe\" required autofocus=\"true\" style=\"width: 280px;\">\n      <button class=\"btn btn-primary\" ><i class=\"fa fa-unlock\"></i></button>\n    </form>\n  `\n})\n\n//\n// https://stackoverflow.com/questions/41274603/observable-of-component-attribute-changes-in-angular2\nexport class ConfirmDeleteDirective implements OnInit{\n  @Output() onconfirm: EventEmitter<any> = new EventEmitter();\n  element;\n  style;\n  id:number=0;\n  constructor(el: ElementRef) { \n    this.element=el.nativeElement;\n    this.style=\"z-index:1;left:0;right:0;min-width: 350px;position: absolute;border: 2px solid red;padding: 10px;background-color: white;margin-top:-20px;display:none;left:25%;box-shadow:1px 1px 1000px #333\";\n    this.id++;\n  }\n\n  @Input() set bgSrc(url) {\n    // if(!url)return;    \n    // this.element.style.backgroundImage = \"url(\"+url+\")\";\n  }\n\n  ngOnInit(){\n    this.element.keyup((e)=> {\n      if (e.keyCode == 27) {\n        this.element.next('.prompt-passwd').remove();  \n      }\n    });\n    this.element.bind('click', (event)=> {\n      //\n      //angular.element('.prompt-passwd').hide();\n      this.element.next().show();\n    });\n    this.element.next().submit(()=>{\n      const pwd=this.element.next().find('input[type=password]').val();\n      this.onconfirm.emit({id:this.id, password:pwd});\n      this.element.next().hide('.prompt-passwd');\n      return false;\n    });\n    \n  }\n\n\n}","import { Pipe, PipeTransform } from '@angular/core';\nimport { Utils } from '../util';\n\n@Pipe({\n  name: 'portion'\n})\nexport class OrderPortionPipe implements PipeTransform {\n\n  roundN(val: number) {\n    if (val <= 5) {\n      return val.toFixed(1);\n    }\n    if (val <= 50) {\n      return Math.round(val);\n    }\n    let N = 5;\n    return (Math.round(val / N) * N);\n  }\n\n  transform(weight: any, def?: any): any {\n    if (!def) {def=''; }\n    if (!weight) { return \"\"; }\n    let m = weight.match(/~([0-9.]+) ?(.+)/);\n    if (!m && def) {m=def.match(/~([0-9.]+) ?(.+)/); }\n    if (!m || m.length < 2) {return ''; }\n    let w = parseFloat(m[1]), unit = (m[2]).toLowerCase();\n    return 'portion entre ' + this.roundN(w - w * 0.07) + unit + ' et ' + this.roundN(w + w * 0.07) + '' + unit;\n  }\n\n}\n\n@Pipe({\n  name: 'baseprice'\n})\nexport class OrderBasepricePipe implements PipeTransform {\n  transform(weight: any, price?: any): any {\n\n    if (!weight || !price) {\n      return '';\n    }\n    const portion = weight.split(/(kg|gr|ml)/i);\n    const w = (portion[0][0] === '~') ? parseFloat(portion[0].substring(1)) : parseFloat(portion[0]);\n    if (portion.length < 2) {\n      return;\n    }\n\n    const unit = (portion[1]).toLowerCase();\n    if (unit === 'kg') {\n      return Utils.roundAmount((10 * price / w));\n    }\n\n    return Utils.roundAmount((100 * price / w));\n  }\n}\n\n@Pipe({\n  name: 'basepriceex'\n})\nexport class OrderBasepricePipeEx implements PipeTransform {\n  transform(weight: any, price?: any): any {\n\n    if (!weight || !price) {\n      return '';\n    }\n    const portion = weight.split(/(kg|gr|ml)/i);\n    const w = (portion[0][0] === '~') ? parseFloat(portion[0].substring(1)) : parseFloat(portion[0]);\n    if (portion.length < 2) {\n      return;\n    }\n\n    const unit = (portion[1]).toLowerCase();\n    if (unit === 'kg') {\n      return Utils.roundAmount((1 * price / w)) + ' / 1kg';\n    }\n    if (unit === 'ml') {\n      return Utils.roundAmount((100 * price / w)) + ' / 100ml';\n    }\n\n    return Utils.roundAmount((100 * price / w))  + ' / 100gr';\n  }\n}\n","import { AfterViewInit, Input, ElementRef, Component, ViewEncapsulation } from '@angular/core';\n\n// import { Prism } from 'prism';\n// import 'prism/themes/prism-okaidia.css!css';\n\n\n//\n// original script\n// https://github.com/dimpu/ngx-md/blob/master/src/markdown/markdown.component.ts\n@Component({\n  selector: 'kng-markdown,[kng-markdown]',\n  template: '<ng-content></ng-content>',\n  encapsulation: ViewEncapsulation.None\n})\nexport class MarkdownDirective implements AfterViewInit {\n\n\n  @Input()\n  set data(value: string) {\n    this.fromData(value || '');\n  }\n\n  @Input('kng-markdown')\n  set kMarkdown(value: string) {\n    this.fromData(value || '');\n  }\n\n  constructor(\n    private elementRef: ElementRef\n  ) {\n    this.element = this.elementRef.nativeElement;\n    this.html = '';\n\n\n\n  }\n  static converter = null;\n\n  html: string;\n\n  @Input() removeRoot= false;\n\n  @Input() src;\n\n  element;\n\n  // # Example inline style link with custom href attributes\n  // [No title or custom attributes](https://example.org)\n  // [Title & no custom attribute](https://example.org \"A title\")\n  // [No title but custom attribute](https://example.org)(rel=\"nofollow\")\n  // [Title & custom attributes](https://example.org \"A title\")(rel=\"nofollow\" class=\"btn btn-primary\")\n  sdExtAttr;\n\n  ngAfterViewInit() {\n    this.elementRef.nativeElement.innerHTML = this.html;\n  }\n\n\n  fromData(data) {\n    if (!data || !data.length) {\n      return;\n    }\n    const raw = data;\n    this.process(this.prepare(raw)).then(html => {\n      this.html = html;\n      this.highlight(html);\n      this.elementRef.nativeElement.innerHTML = html;\n    });\n  }\n\n  fromRAW() {\n    const raw = this.elementRef.nativeElement.innerHTML;\n    if (!raw || !raw.length) {\n      return;\n    }\n    this.process(this.prepare(raw)).then(html => {\n      this.html = html;\n      this.highlight(html);\n      this.elementRef.nativeElement.innerHTML = html;\n    });\n  }\n  prepare(raw) {\n    return raw.split('\\n').map((line) => line.trim()).join('\\n');\n  }\n\n  process(markdown): Promise<string> {\n\n    return import('markdown-it').then(module => {\n      if(!MarkdownDirective.converter) {\n        MarkdownDirective.converter = new module.default({\n          html:true,\n          breaks:true,\n          typographer:true\n        });  \n      }\n      if(this.removeRoot) {\n        return MarkdownDirective.converter.renderInline(markdown);\n      }\n      return MarkdownDirective.converter.render(markdown);\n    })\n\n    // Showdown.extension('extAttributes', this.sdExtAttr);\n    // MarkdownDirective.converter = new Showdown.Converter({ extensions: ['extAttributes'] });\n    // return Utils.script(CDNJS_SHOWDOWN, 'showdown')\n    //      .toPromise().then((showdown: any) => {\n    //   showdown.extension('extAttributes', this.sdExtAttr);\n    //   MarkdownDirective.converter = new showdown.Converter({\n    //     emoji: true,\n    //     parseImgDimensions: true,\n    //     simplifiedAutoLink: true\n    //   });\n\n    //   const md = MarkdownDirective.converter.makeHtml(markdown);\n    //   return (md);\n    // });\n  }\n\n  highlight(html) {\n    // Prism.highlightAll();\n  }\n}\n","import { HttpClient, HttpHeaders } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\n\nimport { config, configCors } from './config';\n\n\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\n\nexport class ReportCustomer {\n  // tslint:disable-next-line: variable-name  \n  _id: string;\n  displayName:string;\n  last1Month: number;\n  last3Month: number;\n  last6Month: number;\n  after6Month: number;\n  amount: number;\n  avg?:number;\n  orders: number;\n  errors?: number;\n  refunds?: number;\n  created?: Date|number;\n}\n\nexport interface ReportOrderIssue {\n  oid: number;\n  title: string;\n  sku: number;\n  quantity: number;\n  issue: string;\n  email: string;\n}\n\nexport class ReportIssues {\n  amount: number;\n  // tslint:disable-next-line: variable-name\n  _id: {\n    vendor: string;\n    month: number;\n    year: number;\n  };\n\n  orders: {\n    total: number;\n    amount: number;\n  };\n  issues: ReportOrderIssue[];\n  ratio?: number;\n}\n\nexport class ReportShopper {\n\n  constructor(json: any) {\n    Object.assign(this, json || {});\n    this.orders.forEach(order => {\n      order.when = new Date(order.when);\n    });\n    this.from = new Date(this.from);\n    this.to = new Date(this.to);\n  }\n\n  orders: {\n    when: Date;\n    who: string;\n    slot: string;\n    bags: number;\n    name: string;\n    postalCode: string;\n    streetAdress: string;\n    amount: number;  \n  }[];\n\n  shoppers: {\n    who : string;\n    ca: number;\n    extra: number;\n  }[];\n\n  from: Date;\n  to: Date;\n  who?:string;\n}\n\nexport class ReportOrders {\n\n  constructor(json: any) {\n    const defaultReport = {\n    };\n\n    Object.assign(this, json || {});\n  }\n\n  shops: {\n    [slug: string]: {\n      name: string;\n      vendor: string;\n      orders: number[];\n      items: number;\n      amount: number;\n      discount: number;\n      fees: number;\n      contractFees: number[];\n      errors?: number;\n      refunds?: number;\n    };\n  };\n\n  products: [{\n    sku: number;\n    title: string;\n    count: number;\n    amount: number;\n    vendor: string;\n    tva:number;\n  }];\n\n  from: Date;\n  to: Date;\n  ca: number;\n  discount: number;\n  amount: number;\n  items: number;\n  serviceamount: number;\n  shippingamount: number;\n  orders: number[];\n}\n\n@Injectable()\nexport class ReportingService {\n\n  private config: any;\n  private headers: HttpHeaders;\n  public report: Observable<ReportOrders>;\n\n  constructor(\n    private http: HttpClient\n  ) {\n    this.headers = new HttpHeaders({\n      'Content-Type': 'application/json',\n      'Cache-Control' : 'no-cache',\n      'Pragma' : 'no-cache',\n      'ngsw-bypass':'true'\n    });\n    \n    this.config = config;\n  }\n\n\n  //\n  // config.API_SERVER+'/v1/orders/invoices/shops/6/2018'\n  getReport(year: number, month?: number|string, shops?: any): Observable<ReportOrders> {\n    month = month || '-';\n    const params: any = {};\n    if (shops) {\n      params.shops = shops;\n    }\n    return this.config = this.http.get<ReportOrders>(config.API_SERVER + '/v1/orders/invoices/shops/' + month + '/' + year, {\n      params,\n      headers: this.headers,\n      withCredentials: (configCors()),\n    }).pipe(\n      map(json => new ReportOrders(json))\n    );\n  }\n\n  //\n  // config.API_SERVER+'/v1/orders/invoices/shopper/6/2018'\n  getReportShopper(year: number, month?: number|string, owner?: string): Observable<ReportShopper> {\n    month = month || '-';\n    const params: any = {};\n    if (owner) {\n      params.owner = owner;\n    }\n    return this.config = this.http.get<ReportOrders>(config.API_SERVER + '/v1/orders/invoices/shopper/' + month + '/' + year, {\n      params,\n      headers: this.headers,\n      withCredentials: (configCors()),\n    }).pipe(\n      map(json => new ReportShopper(json))\n    );\n  }  \n\n\n  getCustomers(): Observable<ReportCustomer[]> {\n    return this.config = this.http.get<ReportCustomer[]>(config.API_SERVER + '/v1/stats/customers', {\n      headers: this.headers,\n      withCredentials: (configCors()),\n    }).pipe(\n      map(json => json)\n    );\n  }\n\n\n  getIssues(year?, month?): Observable<ReportIssues[]> {\n    year = year || '';\n    month = month || '-';\n    return this.config = this.http.get<ReportIssues[]>(config.API_SERVER + '/v1/stats/orders/issues/'  + month + '/' + year, {\n      headers: this.headers,\n      withCredentials: (configCors()),\n    }).pipe(\n      map(json => json)\n    );\n  }\n}\n","import { HttpClient, HttpHeaders } from '@angular/common/http';\nimport { Injectable, Inject } from '@angular/core';\n\nimport { Config, config } from './config';\nimport { DepositAddress } from './user.service';\nimport { ConfigService } from './config.service';\n\n\n// import { _throw } from 'rxjs/observable/throw';\nimport { Observable } from 'rxjs';\n// import { of } from 'rxjs/observable/of';\nimport { ReplaySubject } from 'rxjs';\nimport { map, tap, retryWhen, delay, take } from 'rxjs/operators';\n\nexport class Hub {\n  name: string;\n  description: { en: string, fr: string, de: string};\n\n  //\n  // instance of HUB based on a list of slug alias\n  slug: string;\n  updated: Date;\n  logo: string;\n  defaultTags: string;\n\n  address: {\n    streetAdress: string;\n    postalCode: string;\n    region: string;\n    phone: string;\n    url: string;\n    geo: {\n      lat: number;\n      lng: number;\n    }\n  };\n\n  // FIXME use i18n for mail content\n  mail: {\n    address: string;\n    signature: string;\n    subject: string;\n  };\n\n  colors: {\n    primary: string,\n    primaryText: string,\n    action: string,\n    actionText: string,\n    appbar:string,\n    appbarText:string,\n    colormix:string\n  };\n\n  pageOptions:{\n    themas:boolean;\n    minimal:boolean;\n    maxcat:number;\n  };\n\n  //\n  // HUB dedicated settings\n\n  /* HUB can be inactive, under construction */\n  status: {\n    reason:{ en: string, fr: string, de: string},\n    active: boolean;\n  };\n\n  /* display message web maintenance (that mean that all shipping are off) */\n  maintenance: {\n    reason: { en: string, fr: string, de: string },\n    active: boolean;\n  };\n\n  header: {\n    message: { en: string, fr: string, de: string },\n    active: boolean;\n  };\n\n  //\n  // display checkout message\n  checkout: {\n    title: { en: string, fr: string, de: string },\n    address: { en: string, fr: string, de: string },\n    payment: { en: string, fr: string, de: string },\n    resume: { en: string, fr: string, de: string },\n    message: { en: string, fr: string, de: string },\n    active: boolean;\n  };\n\n  //\n  // list of deposit address\n  deposits: DepositAddress[];\n\n  //\n  // list of closed dates\n  noshipping: [{\n    reason: { en: string, fr: string, de: string };\n    from: Date;\n    to: Date;\n  }];\n\n  siteName: {\n    en: string;\n    de: string;\n    fr: string;\n    image: string;\n  };\n\n  about: {\n    h: { en: string, de: string, fr: string };\n    t: { en: string, de: string, fr: string };\n    p: { en: string, de: string, fr: string };\n    image: string;\n  };\n\n  tagLine: {\n    t: { en: string, de: string, fr: string };\n    h: { en: string, de: string, fr: string };\n    p: { en: string, de: string, fr: string };\n    image: string;\n  };\n\n  footer: {\n    t: { en: string, de: string, fr: string };\n    h: { en: string, de: string, fr: string };\n    p: { en: string, de: string, fr: string };\n    image: string;\n  };\n\n  //\n  // DEPRECATED remove home field\n  home:{\n    // DEPRECATED\n    // // display campagn page in home?\n    // email:String,\n    // phone:String,\n    // // FIXME use i18n for mail content\n    // mail:{\n    //   signature:String,\n    //   subject:String\n    // },\n    customLink: {\n      url: string;\n      label: { en: string, de: string, fr: string };\n    },\n    content:[{\n      h: { en: string, de: string, fr: string };\n      t: { en: string, de: string, fr: string };\n      p: { en: string, de: string, fr: string };\n      image: string;\n      target: string;\n    }],\n    shop:{\n      t: { en: string, de: string, fr: string };\n      h: { en: string, de: string, fr: string };\n      p: { en: string, de: string, fr: string };\n      image: string;\n    },\n    selection: {\n      h: { en: string, de: string, fr: string };\n      t: { en: string, de: string, fr: string };\n      p: { en: string, de: string, fr: string };\n      image: string;\n    },\n    howto: {\n      h: { en: string, de: string, fr: string };\n      t: { en: string, de: string, fr: string };\n      p: { en: string, de: string, fr: string };\n      image: string;\n    }\n  };\n\n  //\n  // Owner of the HUB\n  manager?: string[];\n  logistic?: string[];\n\n  //\n  // HUB dedicated configuration\n  /* limit HUB orders */\n  currentLimit: number;\n\n  /* additional limit for premium users. max orders = (currentLimit + premiumLimit) */\n  premiumLimit: number;\n\n  /* HUB fees added to the product price  */\n  serviceFees: number;\n\n  reservedAmount: number;\n\n  /* accept last minute orders (0 for disabled)*/\n  /* last minute order time limit in hours   */\n  acceptLastMinuteOrder: number;\n\n  /* order is in timeout if payment status != 'paid' and created<15m (timeoutAndNotPaid)*/\n  timeoutAndNotPaid: number;\n\n  /* for testing 50 hours is the time limit between order and delivery*/\n  /* timelimit = monday 18:00 + timelimit = dayDest 9:00*/\n  timelimit: number;\n\n  //\n  // stripe uncaptured charges expire in 7 days\n  // https://support.stripe.com/questions/does-stripe-support-authorize-and-capture\n  uncapturedTimeLimit: number;\n\n  /* order date range between day1 to day2 max 11:00. Lapse time = timelimit */\n  timelimitH: number;\n\n\n  //\n  // Dimanche(0), Lundi, Mardi, Mercredi, Jeudi, Vendredi, Samedi\n  weekdays: number[];\n\n  // FIXME use i18n for times labels\n  shippingtimes: {\n    type: any;\n    default: any;\n  };\n\n\n  //\n  // constraint HuB to a list of categories and vendors\n  categories: string[];\n  vendors: string[];\n\n}\n\n@Injectable()\nexport class HubService {\n\n  private headers: HttpHeaders;\n  public config: Config | any;\n  public hub$: ReplaySubject<Hub>;\n\n  constructor(\n    private http: HttpClient\n  ) {\n    this.headers = new HttpHeaders({\n      'Content-Type': 'application/json',\n      'Cache-Control' : 'no-cache',\n      'Pragma' : 'no-cache',\n      'ngsw-bypass':'true'\n    });\n    this.hub$ = new ReplaySubject<Hub>(1);\n    this.config = ConfigService.defaultConfig;\n\n  }\n\n  list(): Observable<Hub[]> {\n    return this.http.get<Hub[]>(this.config.API_SERVER + '/v1/hubs', {\n      headers: this.headers,\n      withCredentials: true,\n    });\n  }\n\n  get(hub: string): Observable<Hub> {\n    const params = { hub };\n    return this.http.get<Hub>(this.config.API_SERVER + '/v1/hubs/' + hub, {\n      headers: this.headers,\n      withCredentials: true,\n      params: (params)\n    }).pipe(\n      tap(hub => this.hub$.next(hub))\n    );\n  }\n\n  save(hub: Hub) {\n    return this.http.post<Hub>(this.config.API_SERVER + '/v1/hubs/' + hub.slug, hub, {\n      headers: this.headers,\n      withCredentials: true\n  }).pipe(\n      // retryWhen(errors => errors.pipe(delay(1000), take(3))),\n      tap(hub => this.hub$.next.bind(hub))\n  );\n  }\n\n  saveManager(hub: Hub) {\n    return this.http.post<Hub>(this.config.API_SERVER + '/v1/hubs/' + hub.slug + '/manage', hub, {\n      headers: this.headers,\n      withCredentials: true\n    }).pipe(\n        // retryWhen(errors => errors.pipe(delay(1000), take(3))),\n        tap(hub => this.hub$.next.bind(hub))\n    );\n  }\n\n  saveAdmin(hub: Hub) {\n    return this.http.post<Hub>(this.config.API_SERVER + '/v1/hubs/' + hub.slug + '/admin', hub, {\n      headers: this.headers,\n      withCredentials: true\n    }).pipe(\n        // retryWhen(errors => errors.pipe(delay(1000), take(3))),\n        tap(hub => this.hub$.next.bind(hub))\n    );\n  }\n\n}\n","import { Directive, ElementRef, HostListener, Input } from '@angular/core';\n\n\n@Directive({\n  selector: '[one-click]'\n})\nexport class OneClickDirective {\n  @Input() debounceTime = 500;\n\n  constructor(private $elem: ElementRef) { }\n  @HostListener('click', ['$event'])\n  clickEvent() {\n    const $ref = this.$elem;\n    $ref.nativeElement.setAttribute('disabled', 'true');\n    setTimeout(() => {\n      try {\n        $ref.nativeElement.removeAttribute('disabled');\n      }catch(err) {}\n    }, this.debounceTime);\n  }\n}","import { NgModule, ModuleWithProviders } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { HttpClientModule } from '@angular/common/http';\n\nimport { IsAuthenticated, IsAdmin } from './is-authenticated.service';\n\nimport { AssistantService } from './assistant.service';\nimport { CalendarService } from './calendar.service';\nimport { CartService } from './cart.service';\nimport { CategoryService } from './category.service';\nimport { DocumentService } from './document.service';\nimport { ProductService } from './product.service';\nimport { ConfigService } from './config.service';\nimport { LoaderService,\n         LoaderResolve,\n         UserResolve} from './loader.service';\nimport { OrderService } from './order/order.service';\nimport { UserService } from './user.service';\nimport { ShopService } from './shop.service';\nimport { PhotoService } from './photo.service';\n\n\n\n//\n// directives & pipes\nimport { bgSrcDirective } from './util.bg-src.directive';\nimport { ConfirmDeleteDirective } from './util.confirm-delete.directive';\nimport { OrderPortionPipe, OrderBasepricePipe, OrderBasepricePipeEx } from './order/order.pipe.portion';\nimport { MarkdownDirective } from './util.markdown.directive';\nimport { ReportingService } from './reporting.service';\nimport { HubService } from './hub.service';\nimport { AnalyticsService } from './metrics.service';\nimport { OneClickDirective } from './util.one-click.directive';\n\n//\n// dynamic injection of module configuration\n// export const KNG2_OPTIONS = new InjectionToken<any>('KNG2_OPTIONS');\n\n\n@NgModule({\n  imports: [\n    CommonModule,\n    HttpClientModule\n  ],\n  declarations: [\n    bgSrcDirective,\n    ConfirmDeleteDirective,\n    MarkdownDirective,\n    OneClickDirective,\n    OrderPortionPipe,\n    OrderBasepricePipeEx,\n    OrderBasepricePipe\n  ],\n  exports: [\n    bgSrcDirective,\n    ConfirmDeleteDirective,\n    MarkdownDirective,\n    OneClickDirective,\n    OrderPortionPipe,\n    OrderBasepricePipeEx,\n    OrderBasepricePipe,\n  ]\n})\nexport class Kng2CoreModule {\n  //https://angular-2-training-book.rangle.io/handout/modules/feature-modules.html\n  public static forRoot(options:any): ModuleWithProviders<Kng2CoreModule> {\n\n    return {\n      ngModule: Kng2CoreModule,\n      providers: [\n        {\n          provide:\"KNG2_OPTIONS\",\n          useValue: options || {}\n        },\n        AssistantService,\n        AnalyticsService,\n        CalendarService,\n        ConfigService,\n        CartService,\n        CategoryService,\n        DocumentService,\n        IsAuthenticated,\n        IsAdmin,\n        HubService,\n        LoaderService,\n        LoaderResolve,\n        OrderService,\n        PhotoService,\n        ProductService,\n        ShopService,\n        ReportingService,\n        UserService,\n        UserResolve\n      ]\n    };\n  }\n}\n","//\n// module\nexport { Kng2CoreModule } from './kng2-core.module';\n\n//\n// services\nexport { ConfigService } from './config.service';\n\nexport { CalendarService, ProductOrderTiming } from './calendar.service';\n\nexport { AnalyticsService, Metrics } from './metrics.service';\n\nexport { Assistant,\n         AssistantService,\n         AssistantState,\n         AssistantStep,\n         AssistantMessage,\n         ClientDiscussion,\n         Usage,\n         parseSteps } from './assistant.service';\n\nexport { CartAction,\n         CartConfig,\n         CartModel,\n         CartItem,\n         CartItemsContext,\n         CartService,\n         CartSchedulerStatus,\n         CartItemFrequency,\n         CartSubscription,\n         CartSubscriptionParams,\n         CartSubscriptionProductItem,\n         CartSubscriptionServiceItem,\n         CartState } from './cart.service';\n\nexport { Category,\n         CategoryService } from './category.service';\n\nexport { Document,\n         DocumentHeader,\n         DocumentService } from './document.service';\n\nexport { IsAuthenticated, IsAdmin } from './is-authenticated.service';\n\nexport { LoaderService,\n         LoaderResolve,\n         UserResolve,\n         LoaderData,\n         LoaderCoreData } from './loader.service';\n\nexport { Order,\n         OrderItem, OrderAddress } from './order/order';\nexport { OrderService, OrderCustomerInvoices } from './order/order.service';\n\nexport { Photo,\n         PhotoService } from './photo.service';\n\nexport { Product,\n         ProductPortion,\n         ProductService } from './product.service';\n\nexport { Shop,\n         ShopService } from './shop.service';\n\nexport { Hub,\n         HubService } from './hub.service';\n\nexport { ReportOrders,\n         ReportCustomer,\n         ReportIssues,\n         ReportOrderIssue,\n         ReportingService } from './reporting.service';\n\nexport { User,\n         UserCard,\n         UserAddress,\n         DepositAddress,\n         ShippingAddress,\n         UserService,\n         CustomerChurn } from './user.service';\n\nexport { EnumCancelReason,\n         EnumFinancialStatus,\n         EnumFulfillments,\n         EnumOrderIssue,\n         EnumShippingMode\n       } from './order/order.enum';\n\n\nexport * from './util';\n//\n// directives & pipes\nexport { MarkdownDirective } from './util.markdown.directive';\nexport { bgSrcDirective } from './util.bg-src.directive';\nexport { OneClickDirective } from './util.one-click.directive';\nexport { ConfirmDeleteDirective } from './util.confirm-delete.directive';\nexport { OrderPortionPipe, OrderBasepricePipe, OrderBasepricePipeEx } from './order/order.pipe.portion';\n\n//\n// export variable instance\nexport { Config,\n         ConfigKeyStoreEnum,\n         ConfigMenu,\n         config } from './config';\n\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["Cache","_throw","i1.UserService","i2.ConfigService","i2.CalendarService","i1.ConfigService","i2.UserService","i3.CategoryService","i4.CartService","i5.ShopService","i6.OrderService"],"mappings":"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"}