#!/usr/bin/env bash

# SPDX-FileCopyrightText: 2024 3mdeb <contact@3mdeb.com>
#
# SPDX-License-Identifier: Apache-2.0

source $DTS_ENV
source $DTS_FUNCS

board_config() {
  case "$SYSTEM_VENDOR" in
    "Notebook")
      case "$SYSTEM_MODEL" in
        "NS50_70MU")
          HAVE_EC="true"
          NEED_EC_RESET="true"
          COMPATIBLE_EC_FW_VERSION="2022-08-31_cbff21b"
          EC_HASH="d1001465cea74a550914c14f0c8f901b14827a3b5fa0b612ae6d11594ac2b405  /tmp/ecupdate.rom"
          BIOS_HASH="d4c30660c53bac505997de30b9eac4c5ac15f3212c62366730dc2ca3974bba18  /tmp/biosupdate.rom"
          PROGRAMMER_BIOS="internal"
          PROGRAMMER_EC="ite_ec"
          BIOS_LINK="https://cloud.3mdeb.com/index.php/s/SKpqSNzfFNY7AbK/download"
          EC_LINK="https://cloud.3mdeb.com/index.php/s/GK2KbXaYprkCCWM/download"
          ;;
        "NV4XMB,ME,MZ")
          HAVE_EC="true"
          NEED_EC_RESET="true"
          COMPATIBLE_EC_FW_VERSION="2022-10-07_c662165"
          EC_HASH="7a75fd9afd81012f7c1485cc335298979509e5929d931d898465fbddb4ce105c  /tmp/ecupdate.rom"
          BIOS_HASH="7271b638c87cba658162931f55bdaa6987eb5b0555075ce8e2297a79a505c8b0  /tmp/biosupdate.rom"
          PROGRAMMER_BIOS="internal:boardmismatch=force"
          PROGRAMMER_EC="ite_ec:boardmismatch=force,romsize=128K,autoload=disable"
          BIOS_LINK="https://cloud.3mdeb.com/index.php/s/3cjkJSWBzPfb5SP/download"
          EC_LINK="https://cloud.3mdeb.com/index.php/s/9S5Tmy6kwFjpcNm/download"
          ;;
        *)
          error_exit "Board model $SYSTEM_MODEL is currently not supported"
	;;
      esac
      ;;
    *)
      error_exit "Board vendor: $SYSTEM_VENDOR is currently not supported"
      ;;
  esac
}

check_for_opensource_firmware()
{
  echo "Checking for opensource firmware"
  $DASHARO_ECTOOL info >> /dev/null 2>&1
  if [ $? -eq 0 ]; then
    error_exit "Device has already Open Source Embedded Controller firmware, aborting..."
  fi
}

download_files()
{
  wait_for_network_connection
  BIOS_UPDATE_FILE="/tmp/biosupdate.rom"
  EC_UPDATE_FILE="/tmp/ecupdate.rom"
  wget -O $EC_UPDATE_FILE $EC_LINK
  error_check "Cannot download EC update file. Aborting..."
  wget -O $BIOS_UPDATE_FILE $BIOS_LINK
  error_check "Cannot download FW update file. Aborting..."
  echo "Successfully downloaded EC and FW files."
}

update_ec() {
  sha256sum --check <(echo "$EC_HASH")
  error_check "Failed to download EC firmware update"

  echo "Updating EC..."
  $FLASHROM -p ${PROGRAMMER_EC} -w /tmp/ecupdate.rom >> $FLASHROM_LOG_FILE 2>> $ERR_LOG_FILE
  error_check "Failed to update EC firmware"

  echo "Successfully updated EC firmware"
}

install() {
  sha256sum --check <(echo "$BIOS_HASH")
  error_check "Failed to verify Dasharo firmware"

  if [ "$HAVE_EC" == "true" ]; then
    _ec_fw_version=$($FLASHROM -p ${PROGRAMMER_EC} | grep "Mainboard EC Version" | tr -d ' ' | cut -d ':' -f 2)

    if [ "$_ec_fw_version" != "$COMPATIBLE_EC_FW_VERSION" ]; then
      echo "EC version: $_ec_fw_version is not supported, update required"
      update_ec
    fi
  fi

  echo "Installing Dasharo firmware..."
  $FLASHROM -p ${PROGRAMMER_BIOS} --ifd -i bios -w /tmp/biosupdate.rom >> $FLASHROM_LOG_FILE 2>> $ERR_LOG_FILE
  error_check "Failed to install Dasharo firmware"

  echo "Successfully installed Dasharo firmware"

  echo "Powering off"
  sleep 1
  if [ "$NEED_EC_RESET" = "true" ]; then
    it5570_shutdown
  else
    ${CMD_POWEROFF}
  fi
}

usage() {
  echo "Usage:"
  echo "  $0 "
  exit 1
}

ROOT_DIR="/"

[ -z "$SYSTEM_VENDOR" ] && error_exit "SYSTEM_VENDOR not given"
[ -z "$SYSTEM_MODEL" ] && error_exit "SYSTEM_MODEL not given"

check_for_opensource_firmware
board_config
download_files
install
