/**
 * @author: Jeff Thompson
 * This is a port of py from PyCCN, written by: 
 * Derek Kulinski <takeda@takeda.tk>
 * Jeff Burke <jburke@ucla.edu>
 * 
 * See COPYING for copyright and distribution information.
 */

#ifndef NDN_CLOSURE_HPP
#define	NDN_CLOSURE_HPP

#include "Common.hpp"

namespace ndn {

enum UpcallResult {
  CLOSURE_RESULT_ERR               = -1, // upcall detected an error
  CLOSURE_RESULT_OK                =  0, // normal upcall return
  CLOSURE_RESULT_REEXPRESS         =  1, // reexpress the same interest again
  CLOSURE_RESULT_INTEREST_CONSUMED =  2, // upcall claims to consume interest
  CLOSURE_RESULT_VERIFY            =  3, // force an unverified result to be verified
  CLOSURE_RESULT_FETCHKEY          =  4  // get the key in the key locator and re-call the interest
};

enum UpcallKind {
  UPCALL_FINAL              = 0, // handler is about to be deregistered
  UPCALL_INTEREST           = 1, // incoming interest
  UPCALL_CONSUMED_INTEREST  = 2, // incoming interest, someone has answered
  UPCALL_CONTENT            = 3, // incoming verified content
  UPCALL_INTEREST_TIMED_OUT = 4, // interest timed out
  UPCALL_CONTENT_UNVERIFIED = 5, // content that has not been verified
  UPCALL_CONTENT_BAD        = 6  // verification failed  
};

class NDN;
class Interest;
class ContentObject;

class UpcallInfo {
public:
  UpcallInfo(NDN *ndn, ptr_lib::shared_ptr<Interest> &interest, int matchedComps, ptr_lib::shared_ptr<ContentObject> &contentObject) 
  {
    ndn_ = ndn;
    interest_ = interest;
    contentObject_ = contentObject;
  }
  
  NDN *getNDN() { return ndn_; }
  
  ptr_lib::shared_ptr<Interest> &getInterest() { return interest_; }
  
  ptr_lib::shared_ptr<ContentObject> &getContentObject() { return contentObject_; }
  
private:
  NDN *ndn_;
  ptr_lib::shared_ptr<Interest> interest_;
  ptr_lib::shared_ptr<ContentObject> contentObject_;
};

class Closure {
public:
  virtual UpcallResult upcall(UpcallKind kind, UpcallInfo &upcallInfo) = 0;
};

}

#endif
