#include "tmFilters.h"

#include <fsfw/pus/Service5EventReporting.h>
#include <tmtc/pusIds.h>

#include "eive/definitions.h"

PusPacketFilter filters::hkFilter() {
  PusPacketFilter hkFilter;
  hkFilter.addApid(config::EIVE_PUS_APID);
  hkFilter.addService(pus::PUS_SERVICE_3);
  return hkFilter;
}

PusPacketFilter filters::miscFilter() {
  PusPacketFilter miscFilter;
  miscFilter.addApid(config::EIVE_PUS_APID);
  miscFilter.addService(pus::PUS_SERVICE_17);
  miscFilter.addService(pus::PUS_SERVICE_2);
  miscFilter.addService(pus::PUS_SERVICE_200);
  miscFilter.addService(pus::PUS_SERVICE_201);
  miscFilter.addService(pus::PUS_SERVICE_9);
  miscFilter.addService(pus::PUS_SERVICE_20);
  return miscFilter;
}

PusPacketFilter filters::okFilter() {
  PusPacketFilter okFilter;
  okFilter.addApid(config::EIVE_PUS_APID);
  okFilter.addServiceSubservice(pus::PUS_SERVICE_5,
                                Service5EventReporting::Subservice::NORMAL_REPORT);
  okFilter.addService(pus::PUS_SERVICE_8);
  okFilter.addServiceSubservice(pus::PUS_SERVICE_1, 1);
  okFilter.addServiceSubservice(pus::PUS_SERVICE_1, 3);
  okFilter.addServiceSubservice(pus::PUS_SERVICE_1, 5);
  okFilter.addServiceSubservice(pus::PUS_SERVICE_1, 7);
  return okFilter;
}

PusPacketFilter filters::notOkFilter() {
  PusPacketFilter notOkFilter;
  notOkFilter.addApid(config::EIVE_PUS_APID);
  notOkFilter.addServiceSubservice(pus::PUS_SERVICE_5, 2);
  notOkFilter.addServiceSubservice(pus::PUS_SERVICE_5, 3);
  notOkFilter.addServiceSubservice(pus::PUS_SERVICE_5, 4);
  notOkFilter.addServiceSubservice(pus::PUS_SERVICE_1, 2);
  notOkFilter.addServiceSubservice(pus::PUS_SERVICE_1, 4);
  notOkFilter.addServiceSubservice(pus::PUS_SERVICE_1, 6);
  notOkFilter.addServiceSubservice(pus::PUS_SERVICE_1, 8);
  return notOkFilter;
}

PusPacketFilter filters::cfdpFilter() {
  PusPacketFilter cfdpFilter;
  cfdpFilter.addApid(config::EIVE_CFDP_APID);
  return cfdpFilter;
}