version: 1.0.0

{{#config.registerApp}}
registerApp:
  {{#if aad}}
  - uses: aadApp/create
    with:
      name: $\{{CONFIG__MANIFEST__APPNAME__SHORT}}-aad
      generateClientSecret: true

  {{/if}}
  {{#if teamsApp}}
  - uses: teamsApp/create
    with:
      name: $\{{CONFIG__MANIFEST__APPNAME__SHORT}}
  {{/if}}

{{/config.registerApp}}
{{#config.provision}}
provision:
  {{#bot}}
  - uses: botAadApp/create
    with:
      name: $\{{CONFIG__MANIFEST__APPNAME__SHORT}}-bot

  - uses: botFramework/create
    with:
      botId: $\{{BOT_ID}}
      name: $\{{CONFIG__MANIFEST__APPNAME__SHORT}}-bot
      messagingEndpoint: {{messagingEndpoint}}
      description: ""
      channels:
        - name: msteams
        {{#if isM365}}
        - name: outlook
        {{/if}}
  {{/bot}}

{{/config.provision}}
{{#config.configureApp}}
configureApp:
  {{#tab}}
  - uses: file/updateEnv
    with:
      envs:
        {{../../placeholderMappings.tabDomain}}: {{domain}}
        {{../../placeholderMappings.tabEndpoint}}: {{endpoint}}
        {{../../placeholderMappings.tabIndexPath}}: /index.html#

  {{/tab}}
  {{#if aad}}
  - uses: aadApp/update
    with:
      manifestPath: ./aad.manifest.template.json
      outputFilePath : ./build/aad.manifest.$\{{TEAMSFX_ENV}}.json

  {{/if}}
  {{#teamsApp}}
  {{#if appPackagePath}}
  - uses: teamsApp/update
    with:
      appPackagePath: {{appPackagePath}}
  {{else}}
  - uses: teamsApp/validate
    with:
      manifestPath: ./appPackage/manifest.json

  - uses: teamsApp/zipAppPackage
    with:
      manifestPath: ./appPackage/manifest.json
      outputZipPath: ./build/appPackage/appPackage.$\{{TEAMSFX_ENV}}.zip
      outputJsonPath: ./build/appPackage/manifest.$\{{TEAMSFX_ENV}}.json

  - uses: teamsApp/update
    with:
      appPackagePath: ./build/appPackage/appPackage.$\{{TEAMSFX_ENV}}.zip
  {{/if}}
  {{/teamsApp}}

{{/config.configureApp}}
{{#config.deploy}}
deploy:
  {{#tools}}
  - uses: prerequisite/install 
    with:
      {{#devCert}}
      devCert:
        trust: {{trust}}
      {{/devCert}}
      {{#func}}
      func: true
      {{/func}}
      {{#dotnet}}
      dotnet: true
      {{/dotnet}}

  {{/tools}}
  {{#dotnetCommand}}
  - uses: cli/runDotnetCommand
    with:
      args: {{args}}
      workingDirectory: {{workingDirectory}}
      {{#if execPath}}
      execPath: {{execPath}}
      {{/if}}

  {{/dotnetCommand}}
  {{#tab}}
  - uses: file/updateEnv
    with:
      target: ./tabs/.env.teamsfx.local
      envs:
        BROWSER: none
        HTTPS: true
        PORT: {{port}}
        SSL_CRT_FILE: $\{{SSL_CRT_FILE}}
        SSL_KEY_FILE: $\{{SSL_KEY_FILE}}

  {{/tab}}
  {{#if bot}}
  - uses: file/updateEnv
    with:
      target: ./bot/.env.teamsfx.local
      envs:
        BOT_ID: $\{{BOT_ID}}
        BOT_PASSWORD: $\{{SECRET_BOT_PASSWORD}}

  {{/if}}
  {{#ssoTab}}
  - uses: file/updateEnv
    with:
      target: ./tabs/.env.teamsfx.local
      envs:
        REACT_APP_START_LOGIN_PAGE_URL: $\{{ {{~../../placeholderMappings.tabEndpoint~}} }}/auth-start.html
        REACT_APP_CLIENT_ID: $\{{AAD_APP_CLIENT_ID}}
        {{#if functionName}}
        REACT_APP_FUNC_ENDPOINT: http://localhost:7071
        REACT_APP_FUNC_NAME: {{functionName}}
        {{/if}}

  {{/ssoTab}}
  {{#if ssoBot}}
  - uses: file/updateEnv
    with:
      target: ./bot/.env.teamsfx.local
      envs:
        M365_CLIENT_ID: $\{{AAD_APP_CLIENT_ID}}
        M365_CLIENT_SECRET: $\{{SECRET_AAD_APP_CLIENT_SECRET}}
        M365_TENANT_ID: $\{{AAD_APP_TENANT_ID}}
        M365_AUTHORITY_HOST: $\{{AAD_APP_OAUTH_AUTHORITY_HOST}}
        INITIATE_LOGIN_ENDPOINT: $\{{ {{~../placeholderMappings.botEndpoint~}} }}/auth-start.html
        {{#if ssoTab}}
        M365_APPLICATION_ID_URI: api://$\{{ {{~../placeholderMappings.tabEndpoint~}} }}/botid-$\{{BOT_ID}}
        {{else}}
        M365_APPLICATION_ID_URI: api://botid-$\{{BOT_ID}}
        {{/if}}
        {{#if ssoFunction}}
        API_ENDPOINT: http://localhost:7071
        {{/if}}

  {{/if}}
  {{#if ssoFunction}}
  - uses: file/updateEnv
    with:
      target: ./api/.env.teamsfx.local
      envs:
        M365_CLIENT_ID: $\{{AAD_APP_CLIENT_ID}}
        M365_CLIENT_SECRET: $\{{SECRET_AAD_APP_CLIENT_SECRET}}
        M365_TENANT_ID: $\{{AAD_APP_TENANT_ID}}
        M365_AUTHORITY_HOST: $\{{AAD_APP_OAUTH_AUTHORITY_HOST}}
        ALLOWED_APP_IDS: 1fec8e78-bce4-4aaf-ab1b-5451cc387264;5e3ce6c0-2b1f-4285-8d4b-75ee78787346;0ec893e0-5785-4de6-99da-4ed124e5296c;4345a7b9-9a63-4910-a426-35363201d503;4765445b-32c6-49b0-83e6-1d93765276ca;d3590ed6-52b3-4102-aeff-aad2292ab01c;00000002-0000-0ff1-ce00-000000000000;bc59ab01-8403-45c6-8796-ac3ef710b3e3

  {{/if}}
  {{#npmCommands}}
  - uses: cli/runNpmCommand
    with:
      args: {{args}}
      {{#if workingDirectory}}
      workingDirectory: {{workingDirectory}}
      {{/if}}

  {{/npmCommands}}
  {{#frontendStart}}
  - uses: file/updateEnv
    with:
      target: ./tabs/.localSettings
      envs:
        BROWSER: none
        HTTPS: true
        PORT: 53000
        SSL_CRT_FILE: $\{{SSL_CRT_FILE}}
        SSL_KEY_FILE: $\{{SSL_KEY_FILE}}
        {{#if sso}}
        REACT_APP_CLIENT_ID: $\{{AAD_APP_CLIENT_ID}}
        REACT_APP_START_LOGIN_PAGE_URL: $\{{ {{~../../placeholderMappings.tabEndpoint~}} }}/auth-start.html
        REACT_APP_TEAMSFX_ENDPOINT: http://localhost:55000
        {{/if}}
        {{#if functionName}}
        REACT_APP_FUNC_ENDPOINT: http://localhost:7071
        REACT_APP_FUNC_NAME: {{functionName}}
        {{/if}}

  {{/frontendStart}}
  {{#authStart}}
  - uses: file/updateAppSettings
    with:
      target: {{appsettingsPath}}
      appsettings:
        CLIENT_ID: $\{{AAD_APP_CLIENT_ID}}
        CLIENT_SECRET: $\{{SECRET_AAD_APP_CLIENT_SECRET}}
        IDENTIFIER_URI: api://$\{{ {{~../../placeholderMappings.tabDomain~}} }}/$\{{AAD_APP_CLIENT_ID}}
        AAD_METADATA_ADDRESS: $\{{AAD_APP_OAUTH_AUTHORITY}}/v2.0/.well-known/openid-configuration
        OAUTH_AUTHORITY: $\{{AAD_APP_OAUTH_AUTHORITY}}
        TAB_APP_ENDPOINT: $\{{ {{~../../placeholderMappings.tabEndpoint~}} }}
        ALLOWED_APP_IDS: 1fec8e78-bce4-4aaf-ab1b-5451cc387264;5e3ce6c0-2b1f-4285-8d4b-75ee78787346;0ec893e0-5785-4de6-99da-4ed124e5296c;4345a7b9-9a63-4910-a426-35363201d503;4765445b-32c6-49b0-83e6-1d93765276ca;d3590ed6-52b3-4102-aeff-aad2292ab01c;00000002-0000-0ff1-ce00-000000000000;bc59ab01-8403-45c6-8796-ac3ef710b3e3
        URLS: http://localhost:55000

  {{/authStart}}
  {{#botStart}}
  - uses: file/updateEnv
    with:
      target: ./bot/.localSettings
      envs:
        BOT_ID: $\{{BOT_ID}}
        BOT_PASSWORD: $\{{SECRET_BOT_PASSWORD}}
        {{#if sso}}
        M365_CLIENT_ID: $\{{AAD_APP_CLIENT_ID}}
        M365_CLIENT_SECRET: $\{{SECRET_AAD_APP_CLIENT_SECRET}}
        M365_TENANT_ID: $\{{AAD_APP_TENANT_ID}}
        M365_AUTHORITY_HOST: $\{{AAD_APP_OAUTH_AUTHORITY_HOST}}
        INITIATE_LOGIN_ENDPOINT: $\{{ {{~../../placeholderMappings.botEndpoint~}} }}/auth-start.html
        {{#if tab}}
        M365_APPLICATION_ID_URI: api://$\{{ {{~../../placeholderMappings.tabDomain~}} }}/botid-$\{{BOT_ID}}
        {{else}}
        M365_APPLICATION_ID_URI: api://botid-$\{{BOT_ID}}
        {{/if}}
        {{/if}}
        {{#if function}}
        API_ENDPOINT: http://localhost:7071
        {{/if}}

  {{/botStart}}
  {{#if backendStart}}
  - uses: file/updateEnv
    with:
      target: ./api/.localSettings
      envs:
        FUNCTIONS_WORKER_RUNTIME: node
        M365_CLIENT_ID: $\{{AAD_APP_CLIENT_ID}}
        M365_CLIENT_SECRET: $\{{SECRET_AAD_APP_CLIENT_SECRET}}
        M365_TENANT_ID: $\{{AAD_APP_TENANT_ID}}
        M365_AUTHORITY_HOST: $\{{AAD_APP_OAUTH_AUTHORITY_HOST}}
        ALLOWED_APP_IDS: 1fec8e78-bce4-4aaf-ab1b-5451cc387264;5e3ce6c0-2b1f-4285-8d4b-75ee78787346;0ec893e0-5785-4de6-99da-4ed124e5296c;4345a7b9-9a63-4910-a426-35363201d503;4765445b-32c6-49b0-83e6-1d93765276ca;d3590ed6-52b3-4102-aeff-aad2292ab01c;00000002-0000-0ff1-ce00-000000000000;bc59ab01-8403-45c6-8796-ac3ef710b3e3

  {{/if}}
{{/config.deploy}}