#ifndef __PREDICATE_H__
#define __PREDICATE_H__

#include "parameter.h"
#include <vector>
#include <iostream>

using namespace std;

class predicate {
    public:
        string id;
        vector<parameter> pred_list;
        string toString() {
            //schemes
            stringstream s;
            s << id << "(";
            for(unsigned int i = 0; i < pred_list.size(); i++) {
                s << pred_list[i].param;
                if(i < pred_list.size()-1) {
                    s << ",";
                }
            }
            s << ")\n";
            return s.str();
        }
        string toString(bool a) {
            //facts
            stringstream s;
            s << id << "(";
            for(unsigned int i = 0; i < pred_list.size(); i++) {
                s << "'" << pred_list[i].param << "'";
                if(i < pred_list.size()-1) {
                    s << ",";
                }
            }
            s << ").\n";
            return s.str();
        }
        string toString(double a) {
            //query
            stringstream s;
            s << id << "(";
            for(unsigned int i = 0; i < pred_list.size(); i++) {
                if(pred_list[i].type == "STRING") {
                    s << "'" << pred_list[i].param << "'";
                    if(i < pred_list.size()-1) {
                        s << ",";
                    }
                }
                if(pred_list[i].type == "ID") {
                    s << pred_list[i].param;
                    if(i < pred_list.size()-1) {
                        s << ",";
                    }
                }
            }
            s << ")?\n";
            return s.str();
        }
        string toString(int a) {
            //rules
            stringstream s;
            s << id << "(";
            for(unsigned int i = 0; i < pred_list.size(); i++) {
                if(pred_list[i].type == "STRING") {
                    s << "'" << pred_list[i].param << "'";
                    if(i < pred_list.size()-1) {
                        s << ",";
                    }
                }
                if(pred_list[i].type == "ID") {
                    s << pred_list[i].param;
                    if(i < pred_list.size()-1) {
                        s << ",";
                    }
                }
            }
            s << ")";
            return s.str();
        }
};
#endif
