import requests
import pandas as pd
import pprint
import Apikeys

# ************************
# IF YOU RUN THIS SCRIPT AGAIN WITH HUNDREDS OF THOUSANDS OF ENROLLMENTS
# SPREAD IT OUT OVER MANY BATCHES, IDEALLY ALL DAY
# ************************

pp = pprint.PrettyPrinter(indent=4)
IMPORTFILE = "~/Downloads/walmart-supplier-mass-grouping.csv"
APIKEY = Apikeys.SUPPLIERPROD
HEADERS = {
    "accept": "application/json",
    "X-Api-Key": APIKEY,
}
BASEURL = "https://api2.northpass.com/v2/"

def bulk_invite_ppl_under_1500():
    """
    Bulk endpoint which invites new people and adds them to a group via this structure:
    {
    "email": "me@mac.com"
    "groups": "GroupA"
    }
    """
    payload_1 = []
    with open ("/Users/normrasmussen/Downloads/chubb.csv", "r") as csvfile:
        for person in csvfile:
            person = person[:-1]
            miniload = {
                "email": person,
                "groups": "Internal Zenjob Testing"
            }
            payload_1.append(miniload)
    payload = payload = { "data": { "attributes": { "people": payload_1 } } }
    print(payload)
    url = f"{BASEURL}bulk/people"
    response = requests.post(url, headers=HEADERS, json=payload)
    print(f"Completed. Status code is {response.status_code}")

def bulk_invite_ppl_over_1500():
    data = pd.read_csv(IMPORTFILE, encoding = "utf-8")
    emails = list(data["EmailID"].unique())
    url = f"{BASEURL}bulk/people"
    count = 0
    if len(emails) > 499:
        for chunk in range(0, len(emails), 499):
            i = chunk
            payload_1 = []
            i_to_add = emails[i: i + 499]
            for person in i_to_add:
                miniload = {"email": person, "groups": "Active Suppliers" }
                miniload1 = {"email": person, "groups": "All Users" }
                miniload2 = {"email": person, "groups": "Grow With Walmart" }
                payload_1.append(miniload)
                payload_1.append(miniload2)
                payload_1.append(miniload1)
            print(f"The long length payload has {len(payload_1)} people emails")
            payload = {"data": {"attributes": {"people": payload_1}}}
            response = requests.post(url, headers=HEADERS, json=payload)
            count += 1
            print(f"Iteration number {count} out of {int(len(emails))/1500}")
            print(f"Completed. Status code is {response.status_code}")
    else:
        payload_1 = []
        for person in emails:
            miniload = {"email": person, "groups": "Active Suppliers" }
            miniload1 = {"email": person, "groups": "All Users" }
            miniload2 = {"email": person, "groups": "Grow With Walmart" }
            payload_1.append(miniload)
            payload_1.append(miniload2)
            payload_1.append(miniload1)
        print(f"The payload has {len(payload_1)}")
        payload = {"data": {"attributes": {"people": payload_1}}}
        response = requests.post(url, headers=HEADERS, json=payload)
        print(f"Completed. Status code is {response.status_code}")
        print(response.text)

if __name__ == "__main__":
    bulk_invite_ppl_over_1500()
