/*
 * Copyright (C) 2012 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

/*
 *  Import and export general routing data using a XML file.
 */
#pragma once
#include "NfcJniUtil.h"
#include "nfa_api.h"

#include <libxml/parser.h>
#include <string>
#include <vector>

/*****************************************************************************
**
**  Name:           RouteData
**
**  Description:    Base class for every kind of route data.
**
*****************************************************************************/
class RouteData {
 public:
  enum RouteType { ProtocolRoute, TechnologyRoute };
  RouteType mRouteType;

 protected:
  RouteData(RouteType routeType) : mRouteType(routeType) {}
};

/*****************************************************************************
**
**  Name:           RouteDataForProtocol
**
**  Description:    Data for protocol routes.
**
*****************************************************************************/
class RouteDataForProtocol : public RouteData {
 public:
  int mNfaEeHandle;  // for example 0x4f3, 0x4f4
  bool mSwitchOn;
  bool mSwitchOff;
  bool mBatteryOff;
  tNFA_PROTOCOL_MASK mProtocol;

  RouteDataForProtocol()
      : RouteData(ProtocolRoute),
        mNfaEeHandle(NFA_HANDLE_INVALID),
        mSwitchOn(false),
        mSwitchOff(false),
        mBatteryOff(false),
        mProtocol(0) {}
};

/*****************************************************************************
**
**  Name:           RouteDataForTechnology
**
**  Description:    Data for technology routes.
**
*****************************************************************************/
class RouteDataForTechnology : public RouteData {
 public:
  int mNfaEeHandle;  // for example 0x4f3, 0x4f4
  bool mSwitchOn;
  bool mSwitchOff;
  bool mBatteryOff;
  tNFA_TECHNOLOGY_MASK mTechnology;

  RouteDataForTechnology()
      : RouteData(TechnologyRoute),
        mNfaEeHandle(NFA_HANDLE_INVALID),
        mSwitchOn(false),
        mSwitchOff(false),
        mBatteryOff(false),
        mTechnology(0) {}
};

/*****************************************************************************/
/*****************************************************************************/

/*****************************************************************************
**
**  Name:           AidBuffer
**
**  Description:    Buffer to store AID after converting a string of hex
**                  values to bytes.
**
*****************************************************************************/
class AidBuffer {
 public:
  /*******************************************************************************
  **
  ** Function:        AidBuffer
  **
  ** Description:     Parse a string of hex numbers.  Store result in an array
  *of
  **                  bytes.
  **                  aid: string of hex numbers.
  **
  ** Returns:         None.
  **
  *******************************************************************************/
  AidBuffer(std::string& aid);

  /*******************************************************************************
  **
  ** Function:        ~AidBuffer
  **
  ** Description:     Release all resources.
  **
  ** Returns:         None.
  **
  *******************************************************************************/
  ~AidBuffer();

  uint8_t* buffer() { return mBuffer; };
  int length() { return mBufferLen; };

 private:
  uint8_t* mBuffer;
  uint32_t mBufferLen;
};

/*****************************************************************************/
/*****************************************************************************/

/*****************************************************************************
**
**  Name:           RouteDataSet
**
**  Description:    Import and export general routing data using a XML file.
**                  See /data/bcm/param/route.xml
**
*****************************************************************************/
class RouteDataSet {
 public:
  typedef std::vector<RouteData*> Database;
  enum DatabaseSelection { DefaultRouteDatabase, SecElemRouteDatabase };

  /*******************************************************************************
  **
  ** Function:        ~RouteDataSet
  **
  ** Description:     Release all resources.
  **
  ** Returns:         None.
  **
  *******************************************************************************/
  ~RouteDataSet();

  /*******************************************************************************
  **
  ** Function:        initialize
  **
  ** Description:     Initialize resources.
  **
  ** Returns:         True if ok.
  **
  *******************************************************************************/
  bool initialize();

  /*******************************************************************************
  **
  ** Function:        import
  **
  ** Description:     Import data from an XML file.  Fill the database.
  **
  ** Returns:         True if ok.
  **
  *******************************************************************************/
  bool import();

  /*******************************************************************************
  **
  ** Function:        getDatabase
  **
  ** Description:     Obtain a database of routing data.
  **                  selection: which database.
  **
  ** Returns:         Pointer to database.
  **
  *******************************************************************************/
  Database* getDatabase(DatabaseSelection selection);

  /*******************************************************************************
  **
  ** Function:        saveToFile
  **
  ** Description:     Save XML data from a string into a file.
  **                  routesXml: XML that represents routes.
  **
  ** Returns:         True if ok.
  **
  *******************************************************************************/
  static bool saveToFile(const char* routesXml);

  /*******************************************************************************
  **
  ** Function:        loadFromFile
  **
  ** Description:     Load XML data from file into a string.
  **                  routesXml: string to receive XML data.
  **
  ** Returns:         True if ok.
  **
  *******************************************************************************/
  static bool loadFromFile(std::string& routesXml);

  /*******************************************************************************
  **
  ** Function:        deleteFile
  **
  ** Description:     Delete route data XML file.
  **
  ** Returns:         True if ok.
  **
  *******************************************************************************/
  static bool deleteFile();

  /*******************************************************************************
  **
  ** Function:        printDiagnostic
  **
  ** Description:     Print some diagnostic output.
  **
  ** Returns:         None.
  **
  *******************************************************************************/
  void printDiagnostic();

 private:
  Database mSecElemRouteDatabase;  // routes when NFC service selects sec elem
  Database mDefaultRouteDatabase;  // routes when NFC service deselects sec elem
  static const char* sConfigFile;
  static const bool sDebug = false;

  /*******************************************************************************
  **
  ** Function:        deleteDatabase
  **
  ** Description:     Delete all routes stored in all databases.
  **
  ** Returns:         None.
  **
  *******************************************************************************/
  void deleteDatabase();

  /*******************************************************************************
  **
  ** Function:        importProtocolRoute
  **
  ** Description:     Parse data for protocol routes.
  **                  element: XML node for one protocol route.
  **                  database: store data in this database.
  **
  ** Returns:         None.
  **
  *******************************************************************************/
  void importProtocolRoute(xmlNodePtr& element, Database& database);

  /*******************************************************************************
  **
  ** Function:        importTechnologyRoute
  **
  ** Description:     Parse data for technology routes.
  **                  element: XML node for one technology route.
  **                  database: store data in this database.
  **
  ** Returns:         None.
  **
  *******************************************************************************/
  void importTechnologyRoute(xmlNodePtr& element, Database& database);
};
