#!/bin/bash

# SPDX-License-Identifier: GPL-2.0-or-later
# Copyright (C) 2024-present ArchR (https://github.com/archr-linux/Arch-R)

# This file can and should be sourced by ports for various parameters to
# minimize script customizations and allow for easier future updates
# like adding additional supported devices.
# Thanks to JohnnyonFlame, dhwz, romadu, and shantigilbert for the
# suggestion and assistance with this.
# Source used for gptokeyb available at
# https://github.com/christianhaitian/gptokeyb
# Source used for oga_controls available at
# https://github.com/christianhaitian/oga_controls

. /etc/profile

directory="roms"
controlfolder="/$directory/ports/PortMaster"
ESUDO=""
ESUDOKILL="-1"
ESUDOKILL2="-1"
SDLDBUSERFILE="/storage/.config/SDL-GameControllerDB/gamecontrollerdb.txt"
clibs="/usr/lib/compat/"
raloc="/usr/bin"
raconf="--config /storage/.config/retroarch/retroarch.cfg"

[[ -f "$controlfolder/device_info.txt" ]] && source $controlfolder/device_info.txt
[[ -f "$controlfolder/funcs.txt" ]] && source $controlfolder/funcs.txt

# $param_device / $LOWRES / $ANALOG_STICKS (also set by device_info.txt) are used in port launch scripts
case "${QUIRK_DEVICE}" in
  "Anbernic RG552")
    param_device="rg552"
    LOWRES="N"
    ANALOG_STICKS="2"
  ;;
  "Hardkernel ODROID-GO-Ultra"|"Powkiddy RGB10 MAX 3 Pro")
    param_device="s922x"
    LOWRES="N"
    ANALOG_STICKS="2"
  ;;
  "Powkiddy x55")
    param_device="x55"
    LOWRES="N"
    ANALOG_STICKS="2"
  ;;
  "Anbernic RG351M")
    param_device="anbernic"
    LOWRES="Y"
    ANALOG_STICKS="2"
  ;;
  "Anbernic RG351V")
    param_device="anbernic"
    LOWRES="N"
    ANALOG_STICKS="1"
  ;;
  "ODROID-GO Advance*"|"Powkiddy RGB10")
    param_device="oga"
    LOWRES="Y"
    ANALOG_STICKS="1"
  ;;
  "ODROID-GO Super")
    param_device="ogs"
    LOWRES="N"
    ANALOG_STICKS="2"
  ;;
  "Anbernic RG35XX H"|"Anbernic RG40XX H"|"Anbernic RG CubeXX")
    param_device="anbernic"
    LOWRES="N"
    ANALOG_STICKS="2"
  ;;
  "Anbernic RG40XX V")
    param_device="anbernic"
    LOWRES="N"
    ANALOG_STICKS="1"
  ;;
  "Anbernic RG35XX Plus"|"Anbernic RG35XX 2024"|"Anbernic RG28XX")
    param_device="anbernic"
    LOWRES="N"
    ANALOG_STICKS="0"
  ;;
  *)
    param_device="rg552"
    LOWRES="N"
    ANALOG_STICKS="2"
  ;;
esac

get_controls() {
    # Set controller file to be generated
    export SDL_GAMECONTROLLERCONFIG_FILE="/tmp/gamecontrollerdb.txt"

    # Generate controller file for controllers mapped in emulationstation
    /storage/.config/PortMaster/mapper.txt ${SDL_GAMECONTROLLERCONFIG_FILE} ${controlfolder}

    # Set compatability libs
    export LD_LIBRARY_PATH=${clibs}

    # Some ports want sdl_controllerconfig (to set SDL_GAMECONTROLLERCONFIG), so let's fill it in
    sdl_controllerconfig="$(< "${SDL_GAMECONTROLLERCONFIG_FILE}")"
}

GPTOKEYB2="$ESUDO env LD_PRELOAD=$controlfolder/libinterpose.${DEVICE_ARCH}.so $controlfolder/gptokeyb2 $ESUDOKILL"
GPTOKEYB="$ESUDO $controlfolder/gptokeyb $ESUDOKILL"
