using AyCode.Interfaces.Addresses;
using AyCode.Interfaces.Profiles.Dtos;
using AyCode.Interfaces.Profiles;
using AyCode.Interfaces.Users;

namespace AyCode.Interfaces.ServiceProviders;

public interface IAcCompany<TProfile> : IAcCompanyBase, IAcProfileRelation<TProfile>
    where TProfile : IAcProfileDtoBase
{
    public void SetProfile(TProfile profile);
}

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


public interface IAcCompany<TUser, TUserToCompany, TProfile> : IAcCompany<TProfile>, IAcUsersRelation<TUser, TUserToCompany>
    where TUser : IAcUserBase
    where TUserToCompany : IAcUserToCompanyBase
    where TProfile : IAcProfileDtoBase
{}

public interface IAcCompany<TUser, TUserToCompany, TProfile, TAddress> : IAcCompany<TUser, TUserToCompany, TProfile>, IAcCompany<TProfile, TAddress>
    where TUser : IAcUserBase
    where TUserToCompany : IAcUserToCompanyBase
    where TProfile : IAcProfile<TAddress>
    where TAddress : class, IAcAddress
{}