import AsyncStorage from '@react-native-async-storage/async-storage';
import type { SurveyReplied } from './__generated__/graphql';

interface ToldSurveyData {
  surveyId: string;
  seenCount: number;
  replied: number;
  date: string | undefined;
}

let surveyData: ToldSurveyData[] = [];
const storageKey = 'ToldSurveyData';

export async function loadSurveyData() {
  const data = await AsyncStorage.getItem(storageKey);
  if (data) surveyData = JSON.parse(data) as ToldSurveyData[];
}

export function getRepliedSurvey(): SurveyReplied[] {
  return surveyData
    .filter((data) => data.replied > 0)
    .map((data) => ({
      surveyId: data.surveyId,
      date: data.date,
      replied: data.replied > 0,
    }));
}

export function setSeen(surveyId: string) {
  const actualData = surveyData.find((data) => data.surveyId === surveyId);

  if (actualData) {
    // If the survey is already seen, increment the seenCount
    actualData.seenCount += 1;
  } else {
    // If the survey is not seen, add it to the list
    surveyData.push({
      surveyId,
      seenCount: 1,
      replied: 0,
      date: undefined,
    });
  }
  AsyncStorage.setItem(storageKey, JSON.stringify(surveyData));
}

export function setReplied(surveyId: string) {
  const actualData = surveyData.find((data) => data.surveyId === surveyId);

  if (actualData) {
    // If the survey is already seen, increment the replied
    actualData.replied += 1;
    actualData.date = new Date().toISOString();
  } else {
    // If the survey is not seen, add it to the list
    surveyData.push({
      surveyId,
      seenCount: 0,
      replied: 1,
      date: new Date().toISOString(),
    });
  }
  AsyncStorage.setItem(storageKey, JSON.stringify(surveyData));
}

export function isSeen(surveyId: string): boolean {
  return surveyData.some(
    (data) => data.surveyId === surveyId && data.seenCount > 0
  );
}

export function isReplied(surveyId: string): boolean {
  return surveyData.some(
    (data) => data.surveyId === surveyId && data.replied > 0
  );
}
