#ifndef __ARG_PARSER_H__
#define __ARG_PARSER_H__

#include "string.h"
#include "stdio.h"
#include "assert.h"
#include "stdlib.h"

enum RENDER_MODE { RENDER_MATERIALS, RENDER_LIGHTS, RENDER_UNDISTRIBUTED, RENDER_ABSORBED, RENDER_RADIANCE, RENDER_FORM_FACTORS };
#define NUM_RENDER_MODES 6

class ArgParser {

public:

  ArgParser() { DefaultValues(); }

  ArgParser(int argc, char *argv[]) {
    DefaultValues();

    for (int i = 1; i < argc; i++) {
      if (!strcmp(argv[i],"-input")) {
	i++; assert (i < argc); 
	input_file = argv[i];
      } else if (!strcmp(argv[i],"-size")) {
	i++; assert (i < argc); 
	width = height = atoi(argv[i]);
      } else if (!strcmp(argv[i],"-wireframe")) {
        wireframe = true;
      } else if (!strcmp(argv[i],"-num_samples")) {
	i++; assert (i < argc); 
	num_samples = atoi(argv[i]);
      } else if (!strcmp(argv[i],"-interpolate")) {
        interpolate = true;
      } else {
	printf ("whoops error with command line argument %d: '%s'\n",i,argv[i]);
	assert(0);
      }
    }
  }

  void DefaultValues() {
    input_file = NULL;
    width = 100;
    height = 100;
    wireframe = false;
    interpolate = false;
    render_mode = RENDER_RADIANCE;
    animate = false;
    num_samples = 1;
    tone_map = false;
  }

  // ==============
  // REPRESENTATION
  // all public! (no accessors)

  char *input_file;
  int width;
  int height;
  bool wireframe;
  bool interpolate;
  enum RENDER_MODE render_mode;
  bool animate;
  int num_samples;
  bool tone_map;
};

#endif

