# Copyright 2023 Bradley D. Nelson
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

OPTIONS = '-I $src/site'
UE_OPTIONS = OPTIONS + ' -DFORTH=uEForth'
ESP_OPTIONS = OPTIONS + ' -DFORTH=ESP32forth'

DEPLOY_ITEMS = []

DEPLOY_ITEMS += [
  Copy('$dst/deploy/.gcloudignore', '$src/site/.gcloudignore'),
  Copy('$dst/deploy/ueforth.js', '$dst/web/ueforth.js'),
  Importation('$dst/deploy/index.html', '$src/site/index.html', options=ESP_OPTIONS),
  Importation('$dst/deploy/linux.html', '$src/site/linux.html', options=UE_OPTIONS),
  Importation('$dst/deploy/windows.html', '$src/site/windows.html', options=UE_OPTIONS),
  Importation('$dst/deploy/web.html', '$src/site/web.html', options=UE_OPTIONS),
  Importation('$dst/deploy/ESP32forth.html', '$src/site/ESP32forth.html', options=ESP_OPTIONS),
  Importation('$dst/deploy/pico-ice.html', '$src/site/pico-ice.html', options=UE_OPTIONS),
  Importation('$dst/deploy/internals.html', '$src/site/internals.html', options=UE_OPTIONS),
  Importation('$dst/deploy/classic.html', '$src/site/classic.html', options=ESP_OPTIONS),
  Copy('$dst/deploy/eforth.go', '$src/site/eforth.go'),
  Copy('$dst/deploy/app.yaml', '$src/site/app.yaml'),
]

DEPLOY_ITEMS += [
  Copy('$dst/deploy/static/' + i, '$src/site/static/' + i) for i in [
    'eforth.css',
    'robots.txt',
    'esp32-c3-wroom-02.jpg',
    'esp32-s2-wroom.jpg',
    'esp32-wroom.jpg',
    'esp-cam-front.jpg',
    'esp32-c3-mini-1.jpg',
    'esp32-mini-1.jpg',
    'esp32-s2-wrover.jpg',
    'esp-cam-back.jpg',
    'esp-cam-wiring.jpg',
    'serial_bridge.jpg',
  ]
] + [
  Copy('$dst/deploy/static/favicon.ico', '$dst/resources/eforth.ico'),
]

Alias('site', ' '.join(DEPLOY_ITEMS))

Alias('deploy', ' '.join([
  Command('deploy-esp32', 'site',
	        'cd $dst/deploy && gcloud app deploy -q --project esp32forth *.yaml', pool='console'),
  Command('deploy-eforth', 'site',
	        'cd $dst/deploy && gcloud app deploy -q --project eforth *.yaml', pool='console'),
]))

PUBLISH_PARTS = [
  Alias('publish-esp32', ' '.join([
    Publish('publish-esp32-rev',
           '$dst/esp32/ESP32forth.zip',
            'ESP32forth-{{VERSION}}-{{REVSHORT}}.zip'),
    Publish('publish-esp32-ver',
             '$dst/esp32/ESP32forth.zip',
             'ESP32forth-{{VERSION}}.zip'),
  ])),
  Alias('publish-pico-ice', ' '.join([
    Publish('publish-pico-ice-rev',
             '$dst/pico-ice/ueforth-pico-ice.zip',
             'ueforth-pico-ice-{{VERSION}}-{{REVSHORT}}.zip'),
    Publish('publish-pico-ice-ver',
             '$dst/pico-ice/ueforth-pico-ice.zip',
             'ueforth-pico-ice-{{VERSION}}.zip'),
  ])),
  Alias('publish-linux', ' '.join([
    Publish('publish-linux-rev',
             '$dst/posix/ueforth',
             'ueforth-{{VERSION}}-{{REVSHORT}}.linux'),
    Publish('publish-linux-ver',
             '$dst/posix/ueforth',
             'ueforth-{{VERSION}}.linux'),
  ])),
  Alias('publish-web', ' '.join([
    Publish('publish-web-rev',
             '$dst/web/ueforth.js',
             'ueforth-{{VERSION}}-{{REVSHORT}}.js'),
    Publish('publish-web-ver',
             '$dst/web/ueforth.js',
             'ueforth-{{VERSION}}.js'),
  ])),
  Alias('publish-win', ' '.join([
    Alias('publish-win32', ' '.join([
      Publish('publish-win32-rev',
               '$dst/windows/uEf32.exe',
               'uEf32-{{VERSION}}-{{REVSHORT}}.exe'),
      Publish('publish-win32-ver',
               '$dst/windows/uEf32.exe',
               'uEf32-{{VERSION}}.exe'),
    ])),
    Alias('publish-win64', ' '.join([
      Publish('publish-win64-rev',
               '$dst/windows/uEf64.exe',
               'uEf64-{{VERSION}}-{{REVSHORT}}.exe'),
      Publish('publish-win64-ver',
               '$dst/windows/uEf64.exe',
               'uEf64-{{VERSION}}.exe'),
    ])),
  ])),
]

Alias('publish', ' '.join([
  Command('publish-index', ' '.join([
      '$src/tools/webindex.py',
      '$src/tools/publish.py',
    ] + PUBLISH_PARTS),
    '$src/tools/webindex.py >$dst/gen/archive.html && ' +
    '$src/tools/publish.py --src $dst/gen/archive.html --dst archive.html 2>&1 | cat >/dev/null'),
]))
