#include "app_ai_if_custom_ui.h"
#include "app_ai_if.h"
#include "app_ai_if_config.h"
#include "app_ai_tws.h"
#include "app_ble_mode_switch.h"
#include "app_spp.h"
#include "app_through_put.h"
#include "cmsis_os.h"
#include "hal_trace.h"
#ifdef RTOS
#include "cmsis_os.h"
#endif
#include "app_status_ind.h"

#ifdef __AI_VOICE__
#include "ai_control.h"
#include "ai_thread.h"
#include "ai_transport.h"
#endif

#ifdef __AI_VOICE__
static void app_ai_if_custom_ui_global_handler_ind(uint32_t cmd, void *param1,
                                                   uint32_t param2) {
  switch (cmd) {
  case AI_CUSTOM_CODE_AI_ROLE_SWITCH:
    break;

  case AI_CUSTOM_CODE_CMD_RECEIVE:
#ifdef __THROUGH_PUT__
    app_throughput_receive_cmd(param1, param2);
#endif
    break;

  case AI_CUSTOM_CODE_DATA_RECEIVE:
    break;

  case AI_CUSTOM_CODE_AI_CONNECT:
    break;

  case AI_CUSTOM_CODE_AI_DISCONNECT:
#ifdef __THROUGH_PUT__
    app_stop_throughput_test();
#endif
    break;

  case AI_CUSTOM_CODE_UPDATE_MTU:
    break;

  case AI_CUSTOM_CODE_WAKE_UP:
    break;

  case AI_CUSTOM_CODE_START_SPEECH:
    break;

  case AI_CUSTOM_CODE_ENDPOINT_SPEECH:
    break;

  case AI_CUSTOM_CODE_STOP_SPEECH:
    break;
  case AI_CUSTOM_CODE_DATA_SEND_DONE:
#ifdef __THROUGH_PUT__
    app_throughput_cmd_send_done(param1, param2);
#endif
    break;

  case AI_CUSTOM_CODE_KEY_EVENT_HANDLE:
    break;

  case AI_CUSTOM_CODE_AI_ROLE_SWITCH_COMPLETE:
    break;

  case AI_CUSTOM_CODE_MOBILE_CONNECT:
    break;

  case AI_CUSTOM_CODE_MOBILE_DISCONNECT:
    break;

  case AI_CUSTOM_CODE_SETUP_COMPLETE:
    break;

  default:
    break;
  }
}
#endif

bool app_ai_if_custom_ui_send_cmd(uint8_t *cmd_buf, uint16_t cmd_len) {
  osStatus status = (osStatus)osErrorValue;
#ifdef __AI_VOICE__
  TRACE(1, "%s", __func__);

  uint8_t send_buf[L2CAP_MTU] = {0};
  uint16_t *output_size_p = NULL;
  uint8_t *output_buf_p = NULL;

  output_size_p = (uint16_t *)send_buf;
  output_buf_p = &send_buf[AI_CMD_CODE_SIZE];

  memcpy(output_buf_p, cmd_buf, cmd_len);
  *output_size_p = cmd_len;

  if (ai_transport_cmd_put(send_buf, (cmd_len + AI_CMD_CODE_SIZE))) {
    status = ai_mailbox_put(SIGN_AI_TRANSPORT, cmd_len);
  }
#endif
  return (osOK == status);
}

void app_ai_if_custom_init(void) {
#ifdef __AI_VOICE__
  app_ai_register_ui_global_handler_ind(app_ai_if_custom_ui_global_handler_ind);
#endif
}
