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

namespace AyCode.Database.DbSets.Users;

public interface IAcUserDbSetBase<TUser> where TUser : class, IAcUserBase
{
    DbSet<TUser> Users { get; set; }
}

public interface IAcUserDbSetBase<TUser, TProfile, TAddress> : IAcUserDbSetBase<TUser>, IAcProfileDbSetBase<TProfile, TAddress> 
    where TUser : class, IAcUserBase
    where TProfile : class, IAcProfile<TAddress>
    where TAddress : class, IAcAddressDtoBase
{ }

public interface IAcUserDbSetBase<TUser, TProfile, TCompany, TAddress> : IAcUserDbSetBase<TUser, TProfile, TAddress>, IAcCompanyDbSetBase<TCompany> 
    where TUser : class, IAcUserBase
    where TProfile : class, IAcProfile<TAddress>
    where TCompany : class, IAcCompanyBase
    where TAddress : class, IAcAddressDtoBase
{ }

public interface IAcUserDbSetBase<TUser, TProfile, TCompany, TUserToCompany, TAddress> : IAcUserDbSetBase<TUser, TProfile, TCompany, TAddress>
    where TUser : class, IAcUserBase, IAcUser<TProfile, TCompany, TUserToCompany, TAddress>
    where TProfile : class, IAcProfile<TAddress>
    where TCompany : class, IAcCompanyBase
    where TUserToCompany : class, IAcUserToCompanyBase
    where TAddress : class, IAcAddressDtoBase
{ }