using CartWise.Domain.Entities;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.ChangeTracking;

namespace CartWise.Application.Interfaces;

public interface IApplicationDbContext
{
    DbSet<Household> Households { get; }

    DbSet<HouseholdMember> HouseholdMembers { get; }

    DbSet<ShoppingList> ShoppingLists { get; }

    DbSet<ShoppingListItem> ShoppingListItems { get; }

    DbSet<GroceryConcept> GroceryConcepts { get; }

    DbSet<Brand> Brands { get; }

    DbSet<Product> Products { get; }

    DbSet<ProductIdentifier> ProductIdentifiers { get; }

    EntityEntry<TEntity> Entry<TEntity>(TEntity entity) where TEntity : class;

    Task<int> SaveChangesAsync(CancellationToken cancellationToken = default);
}
