using AyCode.Database.DbSets.Profiles;
using AyCode.Database.DbSets.Users;
using AyCode.Interfaces.Addresses;
using AyCode.Interfaces.Profiles;
using AyCode.Interfaces.Profiles.Dtos;
using AyCode.Interfaces.ServiceProviders;
using AyCode.Interfaces.Users;
using Microsoft.EntityFrameworkCore;

namespace AyCode.Database.DbSets.Companies;

public interface IAcCompanyDbSetBase<TCompany> where TCompany : class, IAcCompanyBase
{
    DbSet<TCompany> Companies { get; set; }
}

public interface IAcCompanyDbSetBase<TCompany, TProfile> : IAcCompanyDbSetBase<TCompany>, IAcProfileDbSetBase<TProfile> 
    where TCompany : class, IAcCompany<TProfile>
    where TProfile : class, IAcProfileDtoBase
{ }

public interface IAcCompanyDbSetBase<TCompany, TProfile, TAddress> : IAcCompanyDbSetBase<TCompany, TProfile>, IAcProfileDbSetBase<TProfile, TAddress> 
    where TCompany : class, IAcCompany<TProfile, TAddress>
    where TProfile : class, IAcProfile<TAddress>
    where TAddress : class, IAcAddress
{ }

public interface IAcCompanyDbSetBase<TCompany, TProfile, TAddress, TUserToCompany> : IAcCompanyDbSetBase<TCompany, TProfile, TAddress>, IAcUserToCompanyDbSetBase<TUserToCompany>
    where TCompany : class, IAcCompany<TProfile, TAddress>
    where TProfile : class, IAcProfile<TAddress>
    where TAddress : class, IAcAddress
    where TUserToCompany : class, IAcUserToCompanyBase
{ }