// App.js
import * as React from 'react';
import { NavigationContainer } from '@react-navigation/native';
import { createStackNavigator } from '@react-navigation/stack';
import RecipeIndexScreen from './screens/RecipeIndexScreen';
import RecipeDetailScreen from './screens/RecipeDetailScreen';

const Stack = createStackNavigator();

export default function App() {
  return (
    <NavigationContainer>
      <Stack.Navigator initialRouteName="Recipes">
        <Stack.Screen name="Recipes" component={RecipeIndexScreen} />
        <Stack.Screen name="RecipeDetail" component={RecipeDetailScreen} />
      </Stack.Navigator>
    </NavigationContainer>
  );
}

// data.js
export const recipes = [
  {
    id: '1',
    title: 'Spaghetti Bolognese',
    image: 'https://example.com/spaghetti.jpg',
    tags: ['Pasta', 'Italian'],
    ingredients: ['Spaghetti', 'Ground beef', 'Tomato sauce', 'Onion', 'Garlic'],
    instructions: 'Boil spaghetti. Cook beef with sauce and onions. Serve hot.',
  },
  {
    id: '2',
    title: 'Caesar Salad',
    image: 'https://example.com/caesar.jpg',
    tags: ['Salad', 'Healthy'],
    ingredients: ['Romaine lettuce', 'Croutons', 'Caesar dressing', 'Parmesan cheese'],
    instructions: 'Combine all ingredients and toss with dressing.',
  },
];

// screens/RecipeIndexScreen.js
import React, { useEffect, useState } from 'react';
import { View, Text, TouchableOpacity, FlatList } from 'react-native';
import AsyncStorage from '@react-native-async-storage/async-storage';
import { recipes } from '../data';

const RecipeIndexScreen = ({ navigation }) => {
  const [groupedRecipes, setGroupedRecipes] = useState({});

  useEffect(() => {
    async function loadRecipes() {
      try {
        await AsyncStorage.setItem('recipes', JSON.stringify(recipes));
        const data = await AsyncStorage.getItem('recipes');
        const parsedData = JSON.parse(data);

        const grouped = parsedData.reduce((acc, recipe) => {
          recipe.tags.forEach(tag => {
            acc[tag] = acc[tag] ? [...acc[tag], recipe] : [recipe];
          });
          return acc;
        }, {});
        setGroupedRecipes(grouped);
      } catch (error) {
        console.error(error);
      }
    }
    loadRecipes();
  }, []);

  return (
    <FlatList
      data={Object.keys(groupedRecipes)}
      keyExtractor={(item) => item}
      renderItem={({ item: tag }) => (
        <View>
          <Text style={{ fontSize: 18, fontWeight: 'bold' }}>{tag}</Text>
          {groupedRecipes[tag].map(recipe => (
            <TouchableOpacity
              key={recipe.id}
              onPress={() => navigation.navigate('RecipeDetail', { recipe })}
            >
              <Text>{recipe.title}</Text>
            </TouchableOpacity>
          ))}
        </View>
      )}
    />
  );
};

export default RecipeIndexScreen;


// screens/RecipeIndexScreen.js
import React, { useEffect, useState } from 'react';
import { View, Text, TouchableOpacity, FlatList } from 'react-native';
import AsyncStorage from '@react-native-async-storage/async-storage';
import { recipes } from '../data';

const RecipeIndexScreen = ({ navigation }) => {
  const [groupedRecipes, setGroupedRecipes] = useState({});

  useEffect(() => {
    async function loadRecipes() {
      try {
        await AsyncStorage.setItem('recipes', JSON.stringify(recipes));
        const data = await AsyncStorage.getItem('recipes');
        const parsedData = JSON.parse(data);

        const grouped = parsedData.reduce((acc, recipe) => {
          recipe.tags.forEach(tag => {
            acc[tag] = acc[tag] ? [...acc[tag], recipe] : [recipe];
          });
          return acc;
        }, {});
        setGroupedRecipes(grouped);
      } catch (error) {
        console.error(error);
      }
    }
    loadRecipes();
  }, []);

  return (
    <FlatList
      data={Object.keys(groupedRecipes)}
      keyExtractor={(item) => item}
      renderItem={({ item: tag }) => (
        <View>
          <Text style={{ fontSize: 18, fontWeight: 'bold' }}>{tag}</Text>
          {groupedRecipes[tag].map(recipe => (
            <TouchableOpacity
              key={recipe.id}
              onPress={() => navigation.navigate('RecipeDetail', { recipe })}
            >
              <Text>{recipe.title}</Text>
            </TouchableOpacity>
          ))}
        </View>
      )}
    />
  );
};

export default RecipeIndexScreen;