#ifndef CUSTOMER_H
#define CUSTOMER_H
#pragma once
#include "../thirdparty/SQLiteCpp/include/SQLiteCpp/SQLiteCpp.h"
#include "Park_time.h"
#include <ctime>
#include <random>
#include <string>
#include <vector>

using std::string;
using std::vector;

// enum type is basically een manier om categories te representen als een integer in the background, maar om t in code
// aan te geven als de actual category.
enum class Verhicle_type {
    small = 1,
    medium = 2,
    large = 3,
};

/*
db repr of Customer
int id (not null, auto increment)
string name (not nulll)
string card_code (not null)
Dit moet nog verandert worden.

card code zou eigenlijk een randomly generated string moeten zijn, die je bv. op een ndf card zou opslaan en zo zou
authenticaten bij je parking spot. We kunnen dit ipv of samen met een password gebruiken.
clock in en out creeert en compleet een park_time object. Voegt het toe aan een vector.

*/

class Customer {
  public:
    int id;
    string name;
    string card_code;
    void clock_in(int s_id);
    void clock_out(int s_id);
    // void gen_weekly(); TODO: this
    void gen_monthly();
    Customer(int id_, string name_, Verhicle_type verhicle_);
    void update_db(SQLite::Database& database);

  private:
    Verhicle_type verhicle;
    vector<Park_time> park_instances;
    string gen_cardcode();
};

#endif // CUSTOMER_H