#ifndef SASS_SASS_FUNCTIONS_H
#define SASS_SASS_FUNCTIONS_H

#include "sass.h"
#include "environment.hpp"
#include "fn_utils.hpp"

// Struct to hold custom function callback
struct Sass_Function {
  char*            signature;
  Sass_Function_Fn function;
  void*            cookie;
};

// External import entry
struct Sass_Import {
  char* imp_path; // path as found in the import statement
  char *abs_path; // path after importer has resolved it
  char* source;
  char* srcmap;
  // error handling
  char* error;
  size_t line;
  size_t column;
};

// External environments
struct Sass_Env {
  // links to parent frames
  Sass::Env* frame;
};

// External call entry
struct Sass_Callee {
  const char* name;
  const char* path;
  size_t line;
  size_t column;
  enum Sass_Callee_Type type;
  struct Sass_Env env;
};

// Struct to hold importer callback
struct Sass_Importer {
  Sass_Importer_Fn importer;
  double           priority;
  void*            cookie;
};

#endif