/****************************************************************************
 * This file is part of the project AqHome.
 * AqHome (c) by 2023 Martin Preuss, all rights reserved.
 *
 * The license for this file can be found in the file COPYING which you
 * should have received along with this file.
 ****************************************************************************/

#ifdef HAVE_CONFIG_H
# include <config.h>
#endif


#include "./fini.h"
#include "./aqhome_mqtt_p.h"

#include <gwenhywfar/gwenhywfar.h>
#include <gwenhywfar/args.h>
#include <gwenhywfar/debug.h>
#include <gwenhywfar/endpoint.h>

#include <unistd.h>



/* ------------------------------------------------------------------------------------------------
 * defines
 * ------------------------------------------------------------------------------------------------
 */




/* ------------------------------------------------------------------------------------------------
 * forward declarations
 * ------------------------------------------------------------------------------------------------
 */

static void _disconnectTree(GWEN_MSG_ENDPOINT *ep);



/* ------------------------------------------------------------------------------------------------
 * implementations
 * ------------------------------------------------------------------------------------------------
 */

void AqHomeMqtt_Fini(AQHOME_MQTT *aqh)
{
  if (aqh) {
    if (aqh->rootEndpoint)
      _disconnectTree(aqh->rootEndpoint);
    GWEN_MsgEndpoint_free(aqh->rootEndpoint);
    aqh->rootEndpoint=NULL;
    aqh->brokerEndpoint=NULL;
    aqh->mqttEndpoint=NULL;

    AQHMQTT_Device_List_free(aqh->availableDeviceList);
    aqh->availableDeviceList=NULL;
    AQHMQTT_Device_List_free(aqh->registeredDeviceList);
    aqh->registeredDeviceList=NULL;

    if (aqh->pidFile)
      remove(aqh->pidFile);
  }
}



void _disconnectTree(GWEN_MSG_ENDPOINT *ep)
{
  GWEN_MSG_ENDPOINT *epChild;

  epChild=GWEN_MsgEndpoint_Tree2_GetFirstChild(ep);
  while(epChild) {
    _disconnectTree(epChild);
    epChild=GWEN_MsgEndpoint_Tree2_GetNext(epChild);
  } /* while */

  GWEN_MsgEndpoint_Disconnect(ep);
}




