[tasks.appflowy]
mac_alias = "appflowy-macos"
windows_alias = "appflowy-windows"
linux_alias = "appflowy-linux"

[tasks.appflowy-macos]
dependencies = ["flowy-sdk-release"]
run_task = { name = ["code_generation", "set-app-version", "flutter-build", "copy-to-product"] }
script_runner = "@shell"

[tasks.appflowy-windows]
dependencies = ["flowy-sdk-release"]
run_task = { name = ["code_generation", "set-app-version", "flutter-build", "copy-to-product"] }

[tasks.appflowy-linux]
dependencies = ["flowy-sdk-release"]
run_task = { name = ["code_generation", "set-app-version", "flutter-build", "copy-to-product", "create-release-archive"] }
script_runner = "@shell"

[tasks.appflowy-dev]
mac_alias = "appflowy-macos-dev"
windows_alias = "appflowy-windows-dev"
linux_alias = "appflowy-linux-dev"

[tasks.appflowy-macos-dev]
dependencies = ["flowy-sdk-dev"]
run_task = { name = ["code_generation", "set-app-version", "flutter-build", "copy-to-product"] }
script_runner = "@shell"

[tasks.appflowy-windows-dev]
dependencies = ["flowy-sdk-dev"]
run_task = { name = ["code_generation", "set-app-version", "flutter-build", "copy-to-product"] }

[tasks.appflowy-linux-dev]
dependencies = ["flowy-sdk-dev"]
run_task = { name = ["code_generation", "set-app-version", "flutter-build", "copy-to-product"] }
script_runner = "@shell"

[tasks.copy-to-product]
mac_alias = "copy-to-product-macos"
windows_alias = "copy-to-product-windows"
linux_alias = "copy-to-product-linux"

[tasks.copy-to-product-macos]
script = [
  """
  product_path=${CARGO_MAKE_WORKSPACE_WORKING_DIRECTORY}/app_flowy/product/${APP_VERSION}
  output_path=${product_path}/${TARGET_OS}/${FLUTTER_OUTPUT_DIR}
  if [ -d "${output_path}" ]; then
    rm -rf ${output_path}/
  fi
  mkdir -p ${output_path}

  product=${PRODUCT_NAME}.${PRODUCT_EXT}
  cp -R ${CARGO_MAKE_WORKSPACE_WORKING_DIRECTORY}/app_flowy/build/${TARGET_OS}/Build/Products/${FLUTTER_OUTPUT_DIR}/${product} \
  ${output_path}/${product}
  """,
]
script_runner = "@shell"

[tasks.copy-to-product-linux]
script = [
  """
  product_path=${CARGO_MAKE_WORKSPACE_WORKING_DIRECTORY}/app_flowy/product/${APP_VERSION}
  output_path=${product_path}/${TARGET_OS}/${FLUTTER_OUTPUT_DIR}
  if [ -d "${output_path}" ]; then
    rm -rf ${output_path}/
  fi
  mkdir -p ${output_path}

  product=${PRODUCT_NAME}
  cp -R ${CARGO_MAKE_WORKSPACE_WORKING_DIRECTORY}/app_flowy/build/${TARGET_OS}/${LINUX_ARCH}/${BUILD_FLAG}/bundle \
  ${output_path}/${product}

  cp ${CARGO_MAKE_WORKSPACE_WORKING_DIRECTORY}/app_flowy/linux/appflowy.desktop.temp ${output_path}/${product}
  cp ${CARGO_MAKE_WORKSPACE_WORKING_DIRECTORY}/app_flowy/assets/images/flowy_logo.svg ${output_path}/${product}
  """,
]
script_runner = "@shell"

[tasks.copy-to-product-windows]
script = [
  """
  product_path= set ${CARGO_MAKE_WORKSPACE_WORKING_DIRECTORY}/app_flowy/product/${APP_VERSION}
  output_path= set ${product_path}/${TARGET_OS}
  if is_path_exists ${output_path}
    rm -r ${output_path}/
  fi
  mkdir ${output_path}

  product= set ${PRODUCT_NAME}
  glob_cp  ${CARGO_MAKE_WORKSPACE_WORKING_DIRECTORY}/app_flowy/build/${TARGET_OS}/runner/${FLUTTER_OUTPUT_DIR}/**/* \
  ${output_path}/${product}
  """,
]
script_runner = "@duckscript"

[tasks.set-app-version]
script = [
  """
  if is_empty ${APP_VERSION}
    APP_VERSION = set ${CURRENT_APP_VERSION}
    set_env APP_VERSION ${CURRENT_APP_VERSION}
  end
  echo APP_VERSION: ${APP_VERSION}
  """,
]
script_runner = "@duckscript"

# The following tasks will create an archive that will be used on the GitHub Releases section
# The archives are created using different compression programs depending on the target OS
# The archive will be composed of all files that are located in the /Release/AppFlowy directory
[tasks.create-release-archive]
mac_alias = "create-release-archive-macos"
windows_alias = "create-release-archive-windows"
linux_alias = "create-release-archive-linux"

[tasks.create-release-archive-linux]
script = [
  "cd ${CARGO_MAKE_WORKSPACE_WORKING_DIRECTORY}/app_flowy/product/${APP_VERSION}/${TARGET_OS}/Release",
  "tar -czf ${PRODUCT_NAME}-${TARGET_OS}-x86.tar.gz *"
]

[tasks.create-release-archive-windows]
script = [
  # TODO
  # "cd ${CARGO_MAKE_WORKSPACE_WORKING_DIRECTORY}/app_flowy/product/${VERSION}/${TARGET_OS}/Release/${PRODUCT_NAME}",
  # "tar -czf ${PRODUCT_NAME}-${TARGET_OS}-x86.tar.gz *"
]

[tasks.create-release-archive-macos]
script = [
  # TODO 
  # "cd ${CARGO_MAKE_WORKSPACE_WORKING_DIRECTORY}/app_flowy/product/${VERSION}/${TARGET_OS}/Release/${PRODUCT_NAME}",
  # "tar -czf ${PRODUCT_NAME}-${TARGET_OS}-x86.tar.gz *"
]

[tasks.flutter-build]
script = [
  """
  cd app_flowy/
  flutter clean
  flutter pub get
  flutter build ${TARGET_OS} --${BUILD_FLAG} --build-name=${APP_VERSION}
  """,
]
script_runner = "@shell"

[tasks.flutter-build.linux]
script = [
  """
  cd app_flowy/
  flutter clean
  flutter pub get
  flutter build ${TARGET_OS} --${BUILD_FLAG}
  """,
]
script_runner = "@shell"

[tasks.flutter-build.windows]
script = [
  """
  cd app_flowy
  exec cmd.exe /c flutter clean
  exec cmd.exe /c flutter pub get
  exec cmd.exe /c flutter build ${TARGET_OS} --${BUILD_FLAG}
  """,
]
script_runner = "@duckscript"

[tasks.code_generation]
script_runner = "@shell"
script = [
  """
  cd app_flowy
  flutter clean
  flutter packages pub get
  flutter packages pub run easy_localization:generate -S assets/translations/ -f keys -o locale_keys.g.dart -S assets/translations -s en.json
  flutter packages pub run build_runner build --delete-conflicting-outputs
  """
]

[tasks.code_generation.windows]
script_runner = "@duckscript"
script = [
  """
  cd ./app_flowy/
  exec cmd.exe /c flutter clean
  exec cmd.exe /c flutter pub get
  exec cmd.exe /c flutter packages pub run easy_localization:generate -S assets/translations/ -f keys -o locale_keys.g.dart -S assets/translations -s en.json
  exec cmd.exe /c flutter packages pub run build_runner build --delete-conflicting-outputs
  """
]