import * as SecureStore from "expo-secure-store";
import type {
  Countdown,
  InitialData,
  Relationship,
  RelationshipData,
  User,
} from "@/constants/Types";

export const saveUser = async (user: User) => {
  try {
    await SecureStore.setItemAsync('user', JSON.stringify(user));
  } catch (error) {
    console.error('Error saving user to SecureStore:', error);
  }
};
export const getUser = async () => {
  try {
    const user = await SecureStore.getItemAsync('user');
    return user ? JSON.parse(user) as User : null;
  } catch (error) {
    console.error('Error getting user from SecureStore:', error);
    return null;
  }
};
export const savePartner = async (partner: User) => {
  try {
    await SecureStore.setItemAsync('partner', JSON.stringify(partner));
  } catch (error) {
    console.error('Error saving partner to SecureStore:', error);
  }
};
export const getPartner = async () => {
  try {
    const partner = await SecureStore.getItemAsync('partner');
    return partner ? JSON.parse(partner) as User : null;
  } catch (error) {
    console.error('Error getting partner from SecureStore:', error);
    return null;
  }
};
export const saveRelationship = async (relationship: Relationship) => {
  try {
    await SecureStore.setItemAsync('relationship', JSON.stringify(relationship));
  } catch (error) {
    console.error('Error saving relationship to SecureStore:', error);
  }
};
export const getRelationship = async () => {
  try {
    const relationship = await SecureStore.getItemAsync('relationship');
    return relationship ? JSON.parse(relationship) as Relationship : null;
  } catch (error) {
    console.error('Error getting relationship from SecureStore:', error);
    return null;
  }
};
export const saveCountdown = async (countdown: Countdown) => {
  try {
    await SecureStore.setItemAsync('countdown', JSON.stringify(countdown));
  } catch (error) {
    console.error('Error saving countdown to SecureStore:', error);
  }
};
export const getCountdown = async () => {
  try {
    const countdown = await SecureStore.getItemAsync('countdown');
    return countdown ? JSON.parse(countdown) as Countdown : null;
  } catch (error) {
    console.error('Error getting countdown from SecureStore:', error);
    return null;
  }
};
export const saveRelationshipData = async (relationshipData: RelationshipData) => {
  try {
    await SecureStore.setItemAsync('partner', JSON.stringify(relationshipData.Partner));
    await SecureStore.setItemAsync('relationship', JSON.stringify(relationshipData.relationship));
  } catch (error) {
    console.error('Error saving partner & relationship to SecureStore:', error);
  }
};
export const saveInitialData = async (initialData: InitialData) => {
  try {
    await SecureStore.setItemAsync('user', JSON.stringify(initialData.user));
    await SecureStore.setItemAsync(
      'relationship', JSON.stringify(initialData.relationshipData.relationship)
    );
    await SecureStore.setItemAsync(
      'partner', JSON.stringify(initialData.relationshipData.Partner)
    );
    await SecureStore.setItemAsync('countdown', JSON.stringify(initialData.countdown));
  } catch (error) {
    console.error('Error saving initial data to SecureStore:', error);
  }
};
