
#pragma once

#include "../ml.h"

#include <math.h>
#include <string>
#include <vector>
#include <regex>

class CsvParser {

private:
    char field_separator;
    char line_separator;
    char line_separator2;
    char quote_character;

    bool skip_header;
    bool header_skiped;

public:
    CsvParser(bool skip_hdr = false, char field_sep = ',', char quote_ch = '"', char line_sep = '\r',
	      char line_sep2 = '\n');

    MlValue parseCSV(const std::string &csvSource);

private:
    void add_line(const std::vector<MlValue> &line, std::vector<MlValue>  &lines);

    MlValue ivalualize(const std::string &value) const;

    bool is_string_int(const std::string &s, long &val) const;

    bool is_string_float(const std::string &s, double &val) const;
};
