#include "dmm_policy_config.h"
//#include <ti_dmm_application_policy.h>
#include <ti_dmm_custom_activities.h>


#include "dmm_policy_config.h"
#include <ti_dmm_custom_activities.h>

/* Stack indices */
#define BLE_IDX     BLE_STACK_POLICY_IDX
#define PROP_IDX    CUSTOM1_STACK_POLICY_IDX

#include "dmm_policy_config.h"
#include <ti_dmm_custom_activities.h>

#define BLE_IDX     BLE_STACK_POLICY_IDX
#define PROP_IDX    CUSTOM1_STACK_POLICY_IDX

#include "dmm_policy_config.h"
#include <ti_dmm_custom_activities.h>

/* Stack indices, per your macros */
#define BLE_IDX   BLE_STACK_POLICY_IDX     // 0
#define PROP_IDX  CUSTOM1_STACK_POLICY_IDX // 1

#define DMMPOLICY_APPLIED_ACTIVITY_PROP_RXTX   0x1000

/* Policy entries:
 *  - Policy 0: BLE Advertising  → PROP paused
 *  - Policy 1: BLE Connecting/Connected/High-BW → PROP paused
 *  - Policy 2: BLE Idle → PROP active
 */
DMMPolicy_Policy DMMPolicy_ApplicationPolicy[] =
{
    // Policy 0: BLE Advertising
    {
      .appState[BLE_IDX] = {
        .state            = DMMPOLICY_BLE_ADV,
        .weight           = 10,
        .timingConstraint = DMMPOLICY_TIME_CRITICAL,
        .pause            = DMMPOLICY_NOT_PAUSED,
        .appliedActivity  = DMMPOLICY_APPLIED_ACTIVITY_BLE_BROADCASTING
      },
      .appState[PROP_IDX] = {
        .state            = ANY,
        .weight           = 0,
        .timingConstraint = DMMPOLICY_TIME_NONE_CRITICAL,
        .pause            = DMMPOLICY_PAUSED,
        .appliedActivity  = DMMPOLICY_APPLIED_ACTIVITY_NONE
      },
      .balancedMode = DMMPOLICY_BALANCED_NONE
    },

    // Policy 1: BLE Connecting / Connected / High-BW
    {
      .appState[BLE_IDX] = {
        .state            = (DMMPOLICY_BLE_CONNECTING |
                             DMMPOLICY_BLE_CONNECTED  |
                             DMMPOLICY_BLE_HIGH_BANDWIDTH),
        .weight           = 10,
        .timingConstraint = DMMPOLICY_TIME_RESERVED,
        .pause            = DMMPOLICY_NOT_PAUSED,
        .appliedActivity  = DMMPOLICY_APPLIED_ACTIVITY_BLE_CONNECTION
      },
      .appState[PROP_IDX] = {
        .state            = ANY,
        .weight           = 0,
        .timingConstraint = DMMPOLICY_TIME_NONE_CRITICAL,
        .pause            = DMMPOLICY_PAUSED,
        .appliedActivity  = DMMPOLICY_APPLIED_ACTIVITY_NONE
      },
      .balancedMode = DMMPOLICY_BALANCED_NONE
    },

    // Policy 2: BLE Idle
    {
      .appState[BLE_IDX] = {
        .state            = DMMPOLICY_BLE_IDLE,
        .weight           = 1,    // BLE still gets minimal slice
        .timingConstraint = DMMPOLICY_TIME_NONE_CRITICAL,
        .pause            = DMMPOLICY_NOT_PAUSED,
        .appliedActivity  = DMMPOLICY_APPLIED_ACTIVITY_NONE
      },
      .appState[PROP_IDX] = {
        .state            = APP_STATE_PROP_ACTIVE,
        .weight           = 5,    // PROP runs when BLE is idle
        .timingConstraint = DMMPOLICY_TIME_NONE_CRITICAL,
        .pause            = DMMPOLICY_NOT_PAUSED,
        .appliedActivity  = DMMPOLICY_APPLIED_ACTIVITY_PROP_RXTX
      },
      .balancedMode = DMMPOLICY_BALANCED_NONE
    }
};

uint32_t DMMPolicy_ApplicationPolicySize =
    sizeof(DMMPolicy_ApplicationPolicy)/sizeof(DMMPolicy_Policy);

DMMPolicy_PolicyTable DMMPolicy_ApplicationPolicyTable =
{
  .stackRole[BLE_IDX]  = DMMPolicy_StackRole_BlePeripheral,
  .stackRole[PROP_IDX] = DMMPolicy_StackRole_custom1,
  .policy              = DMMPolicy_ApplicationPolicy,
  .indexTable          = NULL
};




// /*DMMPolicy_Policy DMMPolicy_ApplicationPolicy[] = {
//     // Policy 0: BLE Advertising + Sub-1 GHz Active
//     {
//         .appState[BLE_STACK_POLICY_IDX] = {
//             .state = DMMPOLICY_BLE_ADV,
//             .weight = 25,
//             .timingConstraint = DMMPOLICY_TIME_CRITICAL,//DMMPOLICY_TIME_RESERVED,//DMMPOLICY_TIME_CRITICAL,//DMMPOLICY_TIME_RESERVED,
//             .pause = DMMPOLICY_NOT_PAUSED,
//             .appliedActivity = DMMPOLICY_APPLIED_ACTIVITY_NONE,
//         },
//         .appState[CUSTOM1_STACK_POLICY_IDX] = {
//             .state = APP_STATE_PROP_ACTIVE,
//             .weight = 10,
//             .timingConstraint =DMMPOLICY_TIME_NONE_CRITICAL,//DMMPOLICY_TIME_RESERVED,// DMMPOLICY_TIME_NONE_CRITICAL,//DMMPOLICY_TIME_RESERVED,
//             .pause = DMMPOLICY_NOT_PAUSED,
//             .appliedActivity = DMMPOLICY_APPLIED_ACTIVITY_NONE,
//         },
//         .balancedMode = DMMPOLICY_BALANCED_NONE,
//     },

//     // Policy 1: BLE Connected (Param Update) + Sub-1 GHz Paused
//     {
//         .appState[BLE_STACK_POLICY_IDX] = {
//             .state = DMMPOLICY_BLE_PARAMUPDATE,
//             .weight = 50,
//             .timingConstraint = DMMPOLICY_TIME_CRITICAL,//DMMPOLICY_TIME_RESERVED,//DMMPOLICY_TIME_CRITICAL,
//             .pause = DMMPOLICY_NOT_PAUSED,
//             .appliedActivity = DMMPOLICY_APPLIED_ACTIVITY_NONE,
//         },
//         .appState[CUSTOM1_STACK_POLICY_IDX] = {
//             .state = APP_STATE_PROP_PAUSED,
//             .weight = 0,
//             .timingConstraint = DMMPOLICY_TIME_NONE_CRITICAL,  //DMMPOLICY_TIME_RESERVED
//             .pause = DMMPOLICY_NOT_PAUSED,//DMMPOLICY_PAUSED,
//             .appliedActivity = DMMPOLICY_APPLIED_ACTIVITY_NONE,
//         },
//         .balancedMode = DMMPOLICY_BALANCED_NONE,
//     },
// };*/

// DMMPolicy_Policy DMMPolicy_ApplicationPolicy[] = {
//     // DMM Policy 0
//     {
//         // BLE Peripheral Policy
//         .appState[BLE_STACK_POLICY_IDX] = {
//             .state = DMMPOLICY_BLE_ADV,//DMMPOLICY_BLE_OAD,
//             .weight = 0,
//             .timingConstraint = DMMPOLICY_TIME_RESERVED,
//             .pause = DMMPOLICY_NOT_PAUSED,
//             .appliedActivity =  DMMPOLICY_APPLIED_ACTIVITY_NONE,
//         },
//         // 15.4 Sensor Policy
//         .appState[CUSTOM1_STACK_POLICY_IDX] = {
//             .state = ANY,
//             .weight = 0,
//             .timingConstraint = DMMPOLICY_TIME_RESERVED,
//             .pause = DMMPOLICY_PAUSED,
//             .appliedActivity =  DMMPOLICY_APPLIED_ACTIVITY_NONE,
//         },
//         //Balanced Mode Policy
//         .balancedMode = DMMPOLICY_BALANCED_NONE,
//     },
//     // DMM Policy 1
//     {
//         // BLE Peripheral Policy
//         .appState[BLE_STACK_POLICY_IDX] = {
//             .state = (DMMPOLICY_BLE_CONNECTING | DMMPOLICY_BLE_HIGH_BANDWIDTH),
//             .weight = 25,
//             .timingConstraint = DMMPOLICY_TIME_RESERVED,
//             .pause = DMMPOLICY_NOT_PAUSED,
//             .appliedActivity =  DMMPOLICY_APPLIED_ACTIVITY_BLE_CONNECTION,
//         },
//         // 15.4 Sensor Policy
//         .appState[CUSTOM1_STACK_POLICY_IDX] = {
//             .state = ANY,
//             .weight = 0,
//             .timingConstraint = DMMPOLICY_TIME_RESERVED,
//             .pause = DMMPOLICY_NOT_PAUSED,
//             .appliedActivity =  DMMPOLICY_APPLIED_ACTIVITY_NONE,
//         },
//         //Balanced Mode Policy
//         .balancedMode = DMMPOLICY_BALANCED_NONE,
//     },
//     // DMM Policy 2
//     {
//         // BLE Peripheral Policy
//         .appState[BLE_STACK_POLICY_IDX] = {
//             .state = ANY,
//             .weight = 0,
//             .timingConstraint = DMMPOLICY_TIME_RESERVED,
//             .pause = DMMPOLICY_NOT_PAUSED,
//             .appliedActivity =  DMMPOLICY_APPLIED_ACTIVITY_NONE,
//         },
//         // 15.4 Sensor Policy
//         .appState[CUSTOM1_STACK_POLICY_IDX] = {
//             .state = ANY,
//             .weight = 1,
//             .timingConstraint = DMMPOLICY_TIME_RESERVED,
//             .pause = DMMPOLICY_NOT_PAUSED,
//             .appliedActivity =  DMMPOLICY_APPLIED_ACTIVITY_NONE,
//         },
//         //Balanced Mode Policy
//         .balancedMode = DMMPOLICY_BALANCED_NONE,
//     },
// };


// // \brief The application policy table size
// uint32_t DMMPolicy_ApplicationPolicySize = (sizeof(DMMPolicy_ApplicationPolicy) / sizeof(DMMPolicy_Policy));

// DMMPolicy_PolicyTable DMMPolicy_ApplicationPolicyTable = {
//     .stackRole[BLE_STACK_POLICY_IDX] = DMMPolicy_StackRole_BlePeripheral,
//     .stackRole[CUSTOM1_STACK_POLICY_IDX] = DMMPolicy_StackRole_custom1,
//     .policy = DMMPolicy_ApplicationPolicy,
//     .indexTable = NULL,
// };


