#define display(v) {for(auto it: v) cout << it << " :: "; cout << endl;}
#include <bits/stdc++.h>
using namespace std;


enum Status {
    VERIFIED,
    UNVERIFIED
};

class Utils {
public:
    static vector<string> splitString(string s, char delimiter = ',') {
        stringstream ss(s);
        string word;
        vector<string> v;
        while (getline(ss, word, delimiter)) {
            v.push_back(word);
        }
        return v;
    }

    static string getStatusString(Status s) {
        switch (s) {
            case VERIFIED: return "VERIFIED";
            case UNVERIFIED: return "NOT VERIFIED"; // todo
            default: return "UNKNOWN";
        }
    }
};


struct Business {
    string productDescription;
    string full_statementDescriptor;
    string short_statement_descriptor;
    string business_name;
    string business_profile_name;
    string url;

    Status kycStatus;

    // assumes that array is correct
     void createBusinessFromRawData(string rawBusinessData) {
        vector<string> parsedBusinessData = Utils::splitString(rawBusinessData, ',');
        kycStatus = UNVERIFIED;

        if (parsedBusinessData.size() < 6)
            return;

        productDescription = parsedBusinessData[0];
        full_statementDescriptor = parsedBusinessData[1];
        short_statement_descriptor = parsedBusinessData[2];
        business_name = parsedBusinessData[3]; // key
        business_profile_name = parsedBusinessData[4];
        url = parsedBusinessData[5];
    }
};

struct KycData {
    string businessName;
    string status;

    void print() {
        string output = status + "  ";
        if (status == "VERIFIED")
            output += "    ";
        output += businessName;
        cout << output << "\n";
    }
};

class KYCValidator {
public:
    vector<KycData> verifyBusinesses(string csvData) {
        vector<string> parsedLines = Utils::splitString(csvData, '\n');

        unordered_map<string, Business> businessMap;
        for (int i = 1; i < parsedLines.size(); i++) {
            Business b;
            b.createBusinessFromRawData(parsedLines[i]);

            if (b.business_name.empty())
                continue;

            b.kycStatus = getKYVStatusOfBusiness(b);

            businessMap[b.business_name] = b;
        }

        vector<KycData> res;
        for (auto [businessName, b]: businessMap) {
            res.push_back(KycData{businessName, Utils::getStatusString(b.kycStatus)});
        }
        return res;
    }
private:
    Status getKYVStatusOfBusiness(Business b) {
        if (b.business_name.empty())
            return UNVERIFIED;
        if (b.business_profile_name.empty())
            return UNVERIFIED;
        if (b.full_statementDescriptor.empty())
            return UNVERIFIED;
        if (b.productDescription.empty())
            return UNVERIFIED;
        if (b.short_statement_descriptor.empty())
            return UNVERIFIED;
        if (b.url.empty())
            return UNVERIFIED;
        return VERIFIED;
    }
};


int main() {
    string input = R"(product_description,full_statement_descriptor,short_statement_descriptor,business_name,business_profile_name,url
User experience platform,UXP,U,Users First Inc.,Users First Platform,https://u...content-available-to-author-only...t.com
Process optimization,MUDA WASTE SOLUTIONS,MUDAWASTE,Kaizen Consulting Inc.,Muda Waste Solutions,https://m...content-available-to-author-only...s.com
Artisanal coffee roaster,OYSTER POINT COFFEE,,Oyster Point Coffee Bar LLC,Oyster Point Coffee,https://o...content-available-to-author-only...e.com
Artisan home goods,FIRESIDE HEARTH CRAFTS AND RUSTIC FURNITURE BOUTIQUE,FIRESIDEHTH,Fireside Furniture Studios LLC,Fireside Hearth Crafts,https://f...content-available-to-author-only...h.com
Tech conference,CONVERGE,CON,Convergence Summit Group LLC,Convergence Events,https://c...content-available-to-author-only...t.com
Payment infrastructure,CBPS,CBP,Collison Brothers Payment Systems Inc.,CBPS,https://c...content-available-to-author-only...s.com
Learning platform,RETAIL,RETAILCO,Trailhead Education Solutions Inc.,Trailhead Learning,https://t...content-available-to-author-only...n.com
Digital marketing agency,PREMIUM SALE PLATFORM,PREMIUMSALE,Sail Design Systems LLC,Sail Framework Studio,https://s...content-available-to-author-only...s.com
Artisan sorbet shop,FROSTY SORBET DELIGHTS,FROSTYSRBT,Frosty Sorbet Delights LLC,Frosty Sorbet Paradise,https://f...content-available-to-author-only...s.com
Emergency systems,BRBS,BRB,Big Red Button Systems Inc.,Big Red Button,https://b...content-available-to-author-only...n.com
Payment processing,LPS,LPS,Link Payment Technologies Corporation,Link Payment Solutions,https://l...content-available-to-author-only...h.com
E-commerce analytics,RETAIL,RET,Black Friday Cyber Monday Analytics Inc.,BFCM Retail Analytics,https://b...content-available-to-author-only...s.com
Energy solutions,ECOMMERCE,ECOM,Exothermic Reactions Inc.,Exothermic Energy,https://e...content-available-to-author-only...y.com
Security consulting,BUFO SECURITY LABS,BUFOSEC,Bufo Cybersecurity Consulting LLC,Bufo Security Labs,https://b...content-available-to-author-only...y.com
Restaurant delivery,NOMS,NOMS,Nom Nom Nom Inc.,Nom Delivery Express,https://n...content-available-to-author-only...s.com
Landscaping services,DIRT PILE LANDSCAPING AND EXCAVATION,DIRTPILE,Dirt Pile Earthworks LLC,Dirt Pile Landscaping,https://d...content-available-to-author-only...s.com
Meticulous craft gallery,POWER CRAFT BEAUTY,PCB,Power Craft Beauty Gallery Inc.,Quality = Power + Craft + Beauty,https://p...content-available-to-author-only...y.com
Platform services,SESSIONS PLATFORM SERVICES,SESSIONS,Sessions Management Inc.,Sessions Platform,https://s...content-available-to-author-only...m.com
,URGENCY FOCUS,URGENT,Urgency Focus Solutions Inc.,Urgency and Focus,https://u...content-available-to-author-only...s.com
Advisory services,SEEK FEEDBACK,FEEDBACK,,Seek Feedback Advisory,https://s...content-available-to-author-only...k.com
Performance consulting,DELIVER RESULTS,RESULTS,Outstanding Results Inc.,Deliver Outstanding Results,https://o...content-available-to-author-only...s.com
Llama accessories,Shop,SH,Llama Love Boutique LLC,Llama Shop,https://l...content-available-to-author-only...e.com
,FAL,F,Falafel Paradise Restaurant LLC,Falafel Paradise,https://f...content-available-to-author-only...e.com
Educational technology,LEARN,LRN,Curious Learning Solutions Inc.,Learn Solutions,https://c...content-available-to-author-only...g.com
Infrastructure services,RESILIENT SYSTEMS MGMT SERVICES,RSMS,Resilient Systems Corporation,Resilient Management Services,https://r...content-available-to-author-only...t.systems
E-commerce platform,ONLINE STORE,ONLSTORE,Humble Commerce LLC,Online Store Builders,https://h...content-available-to-author-only...e.com
Investment services,GENERAL MERCHANDISE,GENMERCH,Macro Optimistic Ventures Inc.,General Merchandise Partners,https://m...content-available-to-author-only...c.com
Human resources,Retail,RTL,Talent Elevation Corp,Retail Talent Solutions,https://t...content-available-to-author-only...n.com
Energy consulting,PACE,PCE,Set Pace Energy Solutions Inc.,Pace Energy,https://s...content-available-to-author-only...y.com
Management consulting,CCS,CCS,Clarity Context Solutions LLC,Clarity Context Solutions,https://c...content-available-to-author-only...t.com
Data analytics,FIRST2LAST,F2L,First Principles Analytics Inc.,First 2 Last Data,https://f...content-available-to-author-only...s.com
Risk management consulting,FEAR ANALYSIS,FEARANA,Fear Fear Fear Uncertainty Doubt Inc.,Fear Uncertainty Doubt Solutions,https://f...content-available-to-author-only...s.com
)";

    KYCValidator *validator = new KYCValidator();
    vector<KycData> kycDataArray = validator->verifyBusinesses(input);

    for (auto kycData: kycDataArray) {
        kycData.print();
    }
    return 0;
}