version: 2.1

commands: # a reusable command with parameters
  deploy:
    parameters:
      ENV:
        default: 'development'
        type: string
      BUCKET_NAME:
        default: '3cr-playground-development'
        type: string
      DIST_NAME:
        default: 'EO7C7NEHS1T35'
        type: string
    steps:
      - run:
          name: 'Publish'
          command: |
            export BUCKET_NAME="<< parameters.BUCKET_NAME >>"
            export DIST_NAME="<< parameters.DIST_NAME >>"
            
            npm install
            
            if [[ "<< parameters.ENV >>" == "development" ]] ; then

              sed -i -e "s:@3cr/viewer\\-browser:@3cr/viewer\\-browser\\-development:g" ./package.json
              sed -i -e "s:@3cr/viewer\\-browser:@3cr/viewer\\-browser\\-development:g" ./README.md
            
            fi
            if [[ "<< parameters.ENV >>" == "next" ]] ; then

              sed -i -e "s:@3cr/viewer\\-browser:@3cr/viewer\\-browser\\-next:g" ./package.json
              sed -i -e "s:@3cr/viewer\\-browser:@3cr/viewer\\-browser\\-next:g" ./README.md
            
            fi
            
            npm set //registry.npmjs.org/:_authToken=$NPM_TOKEN
            npm run deploy:ci
            
            echo "SERVICE_WORKER_BUILD = \"${CIRCLE_BUILD_NUM}_${CIRCLE_BRANCH}\"" >> playground/sw.js
            echo "SERVICE_WORKER_BUILD_TIME = $(date +%s)" >> playground/sw.js
            cat playground/sw.js
            
            npm run deploy:playground
  build-test:
    steps:
      - run:
          name: 'Build Attempt'
          command: |
            npm install
            
            npm run build

jobs:
  build-test:
    docker:
      - image: cimg/node:21.5.0
    resource_class: medium+
    steps:
      - checkout
      - run:
          name: 'Build Attempt'
          command: |
            npm install

            npm run build
            

  deploy-production:
    docker:
      - image: cimg/node:21.5.0
    resource_class: medium+
    steps:
      - checkout
      - deploy:
          ENV: 'production'
          BUCKET_NAME: "3cr-playground"
          DIST_NAME: "E2S3L2TZSMLWP"

  deploy-development:
    docker:
      - image: cimg/node:21.5.0
    resource_class: medium+
    steps:
      - checkout
      - deploy:
          ENV: 'development'
          BUCKET_NAME: "3cr-playground-development"
          DIST_NAME: "EO7C7NEHS1T35"

  deploy-next:
    docker:
      - image: cimg/node:21.5.0
    resource_class: medium+
    steps:
      - checkout
      - deploy:
          ENV: 'next'
          BUCKET_NAME: "3cr-playground-next"
          DIST_NAME: "E1MCN1EZSM8T1O"

workflows:
  deploy-playground:
    jobs:
      - build-test:
          filters:
            branches:
              ignore:
                - main
                - development
                - next
          name: 'Attempt Build'
      - deploy-production:
          filters:
            branches:
              only:
                - main
          name: 'Deploy to NPM Production'
      - deploy-development:
          filters:
            branches:
              only:
                - development
          name: 'Deploy to NPM Development'
      - deploy-next:
          filters:
            branches:
              only:
                - next
          name: 'Deploy to NPM next'
