---
modules:
  - name: {{appName}}-srv
    type: {{language}}
    path: {{& srvPath}}
    requires:
      - name: {{appName}}-registry
        {{#isJava}}
      - name: mtx-api
        properties:
          CDS_MULTITENANCY_SIDECAR_URL: {{^hasIas}}~{mtx-url}{{/hasIas}}{{#hasIas}}~{mtx-cert-url}{{/hasIas}}
        {{/isJava}}
    provides:
      - name: srv-api # required by consumers of CAP services (e.g. approuter)
        properties:
          srv-url: ${default-url}
          {{#hasIas}}srv-cert-url: ${protocol}://${default-host}.cert.${default-domain}{{/hasIas}}

  - name: {{appName}}-mtx
    type: nodejs
    path: {{#isNodejs}}gen/{{/isNodejs}}mtx/sidecar
    {{#isNodejs}}
    build-parameters:
      builder: npm-ci
    {{/isNodejs}}
    {{#isJava}}
    build-parameters:
      builder: custom
      build-result: gen
      commands:
        - npm run build
      requires:
        []
    {{/isJava}}
    parameters:
      instances: 1
      memory: 256M
      disk-quota: 512M{{#hasIas}}
      routes:
        - route: "${default-url}"
        - route: "${default-host}.cert.${default-domain}"{{/hasIas}}
    {{#isNodejs}}
    hooks:
      - name: upgrade-all
        type: task
        phases:
          - blue-green.application.before-start.idle
          - deploy.application.before-start
        parameters:
          name: upgrade
          memory: 512M # increase as required
          disk-quota: 768M # increase as required
          command: cds-mtx upgrade '*'
    {{/isNodejs}}
    provides:
      - name: mtx-api
        properties:
          mtx-url: ${default-url}{{#hasIas}}
          mtx-cert-url: ${protocol}://${default-host}.cert.${default-domain}{{/hasIas}}
    requires:
      []

resources:
  - name: {{appName}}-registry
    type: org.cloudfoundry.managed-service
    requires:
    {{#isNodejs}}
      - name: mtx-api
    {{/isNodejs}}
    {{#isJava}}
      - name: srv-api
    {{/isJava}}
    parameters:
      service: saas-registry
      service-plan: application
      config:
        xsappname: {{appName}}-${org}-${space}
        appName: {{appName}}-${org}-${space}
        displayName: {{appName}}
        description: A simple CAP project.
        category: 'Category'
        appUrls:
          {{#isNodejs}}
          getDependencies: ~{mtx-api/mtx-url}/-/cds/saas-provisioning/dependencies
          onSubscription: ~{mtx-api/mtx-url}/-/cds/saas-provisioning/tenant/{tenantId}
          {{/isNodejs}}
          {{#isJava}}
          getDependencies: ~{srv-api/srv-url}/mt/v1.0/subscriptions/dependencies
          onSubscription: ~{srv-api/srv-url}/mt/v1.0/subscriptions/tenants/{tenantId}
          {{/isJava}}
          onSubscriptionAsync: true
          onUnSubscriptionAsync: true
          onUpdateDependenciesAsync: true
          callbackTimeoutMillis: 300000 # Increase if your deployments are taking longer than that

  - name: {{appName}}-sms
    type: org.cloudfoundry.managed-service
    parameters:
      service: subscription-manager
      service-plan: provider
      config:
        applicationType: application
        appName: {{appName}}-${org}-${space}
        appCallbacks:
          dependenciesCallbacks:
            url: {{#isJava}}~{srv-api/srv-cert-url}/mt/sms/subscriptions/tenants/{app_tid}/dependencies{{/isJava}}{{#isNodejs}}~{mtx-api/mtx-cert-url}/-/cds/sms-provisioning/dependencies/{app_tid}{{/isNodejs}}
          subscriptionCallbacks:
            url: {{#isJava}}~{srv-api/srv-cert-url}/mt/sms/subscriptions/tenants/{app_tid}{{/isJava}}{{#isNodejs}}~{mtx-api/mtx-cert-url}/-/cds/sms-provisioning/tenant/{app_tid}{{/isNodejs}}
            async:
              subscribeEnable: true
              unSubscribeEnable: true
              timeoutInMillis: 300000 # Increase if your deployments are taking longer than that
        displayName: {{appName}}
        description: Description for {{appName}}
        category: Category
        iasServiceInstanceName: {{appName}}-ias{{#hasXsuaa}}
        saasManagerServiceInstanceName: {{appName}}-registry{{/hasXsuaa}}
    requires:
      - name: {{#isJava}}srv-api{{/isJava}}{{^isJava}}mtx-api{{/isJava}}
    processed-after: [{{#hasXsuaa}}{{appName}}-registry, {{/hasXsuaa}}{{appName}}-ias]
