#include <iostream>
#include <string>
#include <fstream>
#include <iomanip>
#include <vector>
#include <sstream>

using namespace std;

struct User{
    string username;
    float gpa;
    int age;
};

void addUser(User users[], string _username, float _gpa, int _age, int length);
void printList(const User users[], int length);

int main (int argc, char **argv) {
    User users[100];
    string _username;
    float _gpa;
    int _age;
    int length = 1;
    fstream fout;

    ifstream is (argv[1]);

    if(is.is_open()){

        vector<string> row;
        string line, word;

        while (true) {

            row.clear();

            if (is.eof())
                break;
            getline(is, line);

            stringstream ss(line);

            while (getline(ss, word, ',')) {
                row.push_back(word);
            }

            _username = row[0];
            _gpa = stof(row[1]);
            _age = stoi(row[2]);

            float min_gpa = stof(argv[3]);
            if(_gpa > min_gpa){
                fout.open(argv[2], ios::out | ios::app);
                fout << _username << "," << _gpa << "," << _age << "\n";
                fout.close();
            }

            addUser(users, _username, _gpa, _age, length);
            length++;
        }

        is.close();

        printList(users, length);
    }

    else cout << "Failed to open the file.";

    return 0;
}

void addUser(User users[], string _username, float _gpa, int _age, int length){
    User user = User();
    user.username = _username;
    user.gpa = _gpa;
    user.age = _age;

    users[length-1] = user;
}

void printList(const User users[], int length){
    for (int i = 0; i < length-1; ++i){
        cout << users[i].username << " [" << users[i].gpa << "] age: " << users[i].age;
        cout << endl;
    }
}
