import { FeatureRequest } from "../../types";
import getStorage from "./storage";

interface VotingData {
    [login: string]: FeatureRequest[],
}

const storage = getStorage();
const STORAGE_KEY = 'voting';

/**
 * Vrátí pole voleb, pro které uživatel aktuálně hlasuje.
 * 
 * @param login login uživatele
 * @returns pole voleb
 */
export async function getUserVotes(login: string) {
    const data: VotingData = await storage.getData(STORAGE_KEY);
    return data?.[login] || [];
}

/**
 * Aktualizuje hlas uživatele pro konkrétní volbu.
 * 
 * @param login login uživatele
 * @param option volba
 * @param active příznak, zda volbu přidat nebo odebrat
 * @returns aktuální data
 */
export async function updateFeatureVote(login: string, option: FeatureRequest, active: boolean): Promise<VotingData> {
    let data: VotingData = await storage.getData(STORAGE_KEY);
    if (data == null) {
        data = {};
    }
    if (!(login in data)) {
        data[login] = [];
    }
    const index = data[login].indexOf(option);
    if (index > -1) {
        if (active) {
            throw Error('Pro tuto možnost jste již hlasovali');
        } else {
            data[login].splice(index, 1);
            if (data[login].length === 0) {
                delete data[login];
            }
        }
    } else if (active) {
        if (data[login].length == 4) {
            throw Error('Je možné hlasovat pro maximálně 4 možnosti');
        }
        data[login].push(option);
    }
    await storage.setData(STORAGE_KEY, data);
    return data;
}