# Remove partners data
remove_partner_storage() {
  local partner_storage_dir="/var/lib/yandex/browser"
  if [ -d "${partner_storage_dir}" ]; then
    rm -rf "${partner_storage_dir}"
  fi
}

# Universal partner data processing
process_partner_data() {
  local source="$1"
  local destination="$2"
  local pattern="$3"

  if [ -d "$source" ]; then
    if find "$source" -maxdepth 1 -type f -name "$pattern" | grep -q .; then
      mkdir -p "$destination"
      find "$source" -maxdepth 1 -type f -name "$pattern" -exec cp -f {} "$destination/" \;
    fi
  fi
  if [ -f "$source" ]; then
    mkdir -p "$(dirname "$destination")"
    cp -f "$source" "$destination"
  fi
}

# Manage partner data
store_partner_data() {
  local base_source="/opt/yandex/browser"
  local base_destination="/var/lib/yandex/browser"

  # Check for partner settings is present
  if [ -f "${base_source}/partner_config" ]; then
    # Clear old data
    remove_partner_storage
    # Directories and files for processing
    declare -A partner_items=(
      ["partner_config"]=""
      ["distrib_info"]=""
      ["master_preferences"]=""
      ["Extensions"]="*.*"
      ["resources"]="clids*.xml tablo* *.png *.svg"
      ["resources/wallpapers"]="*"
    )

    for key in "${!partner_items[@]}"; do
      local patterns=${partner_items[$key]}
      for pattern in $patterns; do
        process_partner_data "$base_source/$key" "$base_destination/$key" "$pattern"
      done
    done
  fi
}

# Manage nss and udev symlinks
manage_symlinks() {
  local action="$1"
  local files=("libnspr4.so.0d" "libplds4.so.0d" "libplc4.so.0d"
    "libssl3.so.1d" "libnss3.so.1d" "libsmime3.so.1d"
    "libnssutil3.so.1d")
  local libdir="/usr/lib"

  for f in "${files[@]}"; do
    local target="${libdir}/$(echo $f | sed -e 's/\.[01]d$//')"
    local link="/opt/yandex/browser/$f"

    if [ "$action" == "create" ]; then
      if [ -f "$target" ]; then
        ln -snf "$target" "$link"
      else
        echo "Error: $target not found." >&2
      fi
    elif [ "$action" == "remove" ]; then
      rm -f "$link"
    fi
  done
}

# Setup chrome-management-service
setup_chrome_management_service() {
  local defaults_file="/etc/default/yandex-browser"
  local service_path="/opt/yandex/browser/chrome-management-service"
  local policies_dir="/etc/opt/yandex/browser/policies/enrollment"
  local signing_key_file="${policies_dir}/DeviceTrustSigningKey"

  if ! grep -q "install_device_trust_key_management_command=true" "$defaults_file" 2>/dev/null; then
    return
  fi

  if ! getent group chromemgmt >/dev/null; then
    groupadd chromemgmt
  fi

  chgrp chromemgmt "$service_path"
  chmod 2755 "$service_path"

  mkdir -p "$policies_dir"

  if [ ! -f "$signing_key_file" ]; then
    touch "$signing_key_file"
  fi
  chgrp chromemgmt "$signing_key_file"
  chmod 664 "$signing_key_file"
}

remove_legacy_files() {
  local files=(
    "/opt/yandex/browser/partner_config_static"
    "/opt/yandex/browser/libffmpeg.so"
    "/opt/yandex/browser/libudev.so.0"
  )
  for file in "${files[@]}"; do
    if [ -f "${file}" ]; then
      rm -f "${file}"
      echo "Removed ${file}"
    fi
  done
}

post_install() {
  #Cleanup
  remove_legacy_files
  # Setup partner data (if present)
  store_partner_data
  # Setup chrome-management-service (if activated)
  setup_chrome_management_service
  # Create nss symlinks
  manage_symlinks create
  # Install icons
  local icons=(16 24 32 48 64 128 256 512)
  for size in "${icons[@]}"; do
    xdg-icon-resource install --size "$size" "/opt/yandex/browser/product_logo_${size}.png" "yandex-browser"
  done

  update-desktop-database -q
  #Install external ffmpeg library for more compatability
  /opt/yandex/browser/update_codecs /opt/yandex/browser || true

}

post_remove() {
  # Remove partners data storage
  remove_partner_storage
  # Remove nss symlinks
  manage_symlinks remove
  # Remove icons
  local icons=(16 24 32 48 64 128 256 512)
  for size in "${icons[@]}"; do
    xdg-icon-resource uninstall --size "$size" "yandex-browser"
  done
  update-desktop-database -q
  # remove legacy files
  remove_legacy_files
}

pre_install() {
  :
}

pre_remove() {
  :
}
post_upgrade() {
  post_install
}
