Source: display.js

import {
    getAllMetadata,
    filterMetadata,
} from './js/database/localStorageService.js';

let recipes = [];

/**
 * Initializes the recipe view by loading metadata and displaying recipes.
 */
function init() {
    try {
        recipes = getAllMetadata();
        displayRecipes(recipes);
    } catch (error) {
        console.error('Error initializing recipe display:', error);
        recipes = [];
        displayRecipes([]);
    }
}

/**
 * Renders recipe cards in the main section.
 *
 * @param {Array<Object>} recipes - Array of recipe metadata objects.
 */
function displayRecipes(recipes) {
    const mainSection = document.querySelector('main');

    let cardGrid = mainSection.querySelector('.card-grid');

    //if card grid doesn't exist, create it
    if (!cardGrid) {
        cardGrid = document.createElement('div');
        cardGrid.classList.add('card-grid');
        mainSection.appendChild(cardGrid);
    } else {
        //clear current recipes to show filtered ones/all
        cardGrid.innerHTML = '';
    }

    // Populate main with recipes from local storage
    recipes.forEach((recipe) => {
        const addition = document.createElement('recipe-card');
        addition.data = recipe;
        cardGrid.appendChild(addition);
    });
}

/**
 * Filters and displays recipes that include a specific ingredient.
 *
 * @param {string} ingredient - Ingredient to filter recipes by.
 */
// function displayFilteredRecipes(ingredient) {
//     const filtered = recipes.filter(recipe =>
//         recipe.recipeIngredient && recipe.recipeIngredient.some(x => x.name.toLowerCase() === ingredient.toLowerCase())
//     );
// }
function FilterByMealType(type) {
    if (type == 'Meal') {
        return displayRecipes(recipes);
    }

    const filtered = filterMetadata({ recipeCategory: type });
    displayRecipes(filtered);
}

function FilterByCuisine(cuisine) {
    if (cuisine === 'Cuisine') {
        return displayRecipes(recipes);
    }
    const filtered = filterMetadata({ recipeCuisine: cuisine });
    displayRecipes(filtered);
}

function FilterByTime(mins) {
    if (mins == 'Estimated Time') {
        return displayRecipes(recipes);
    }

    const filtered = filterMetadata({ timeRange: mins });
    displayRecipes(filtered);
}

/**
 * (Unused) Gets recipe data from localStorage.
 *
 * @returns {Array<Object>} Array of recipes or empty array if none found.
 */
function getFromStorage() {
    const cards = JSON.parse(localStorage.getItem('recipe'));
}
function FilterByFavorite() {
    try {
        const filtered = filterMetadata({ isFavorite: true });
        displayRecipes(filtered);
    } catch (error) {
        console.error('Error filtering favorites:', error);
        displayRecipes([]);
    }
}

function displayFilteredRecipes(ingredients) {
    if (!ingredients || ingredients.length == 0) {
        displayRecipes(recipes);
        return;
    }

    const filtered = filterMetadata({ recipeIngredient: ingredients });
    displayRecipes(filtered);
}

function resetFilters() {
    try {
        recipes = getAllMetadata(); // refresh recipes from storage
        displayRecipes(recipes);
    } catch (error) {
        console.error('Error resetting filters:', error);
        recipes = [];
        displayRecipes([]);
    }
}

export {
    init,
    displayFilteredRecipes,
    FilterByMealType,
    FilterByCuisine,
    FilterByTime,
    FilterByFavorite,
    resetFilters,
};