from parallels.core.hosting_repository.model import HostingRepositoryModel
from parallels.plesk_multi_server.hosting_repository.base import PleskMultiServerBaseModel
from parallels.plesk_multi_server.hosting_repository.customer import PleskMultiServerCustomerModel
from parallels.plesk_multi_server.hosting_repository.database import PleskMultiServerDatabaseModel
from parallels.plesk_multi_server.hosting_repository.database_user import PleskMultiServerDatabaseUserModel
from parallels.plesk_multi_server.hosting_repository.domain import PleskMultiServerDomainModel
from parallels.plesk_multi_server.hosting_repository.domain_alias import PleskMultiServerDomainAliasModel
from parallels.plesk_multi_server.hosting_repository.mail_account import PleskMultiServerMailAccountModel
from parallels.plesk.hosting_repository.dns_record import PleskDnsRecordModel
from parallels.plesk.hosting_repository.extension import PleskExtensionModel
from parallels.plesk.hosting_repository.panel_user import PleskPanelUserModel
from parallels.plesk.hosting_repository.panel_user_role import PleskPanelUserRoleModel
from parallels.plesk.hosting_repository.service_plan import PleskServicePlanModel
from parallels.plesk.hosting_repository.service_plan_addon import PleskServicePlanAddonModel
from parallels.plesk_multi_server.hosting_repository.panel import PleskMultiServerPanelModel
from parallels.plesk_multi_server.hosting_repository.reseller import PleskMultiServerResellerModel
from parallels.plesk_multi_server.hosting_repository.subdomain import PleskMultiServerSubdomainModel
from parallels.plesk_multi_server.hosting_repository.subscription import PleskMultiServerSubscriptionModel
from parallels.plesk_multi_server.hosting_repository.tomcat import PleskMultiServerTomcatModel
from parallels.plesk_multi_server.hosting_repository.virtual_hosting_settings import \
    PleskMultiServerVirtualHostingSettingsModel


class PleskMultiServerHostingRepositoryModel(HostingRepositoryModel, PleskMultiServerBaseModel):
    @property
    def panel_user(self):
        """Model of Plesk Multi Server panel user

        :rtype: parallels.plesk.hosting_repository.panel_user.PleskPanelUserModel
        """
        return PleskPanelUserModel(self.pms_management_server)

    @property
    def panel_user_role(self):
        """Model of Plesk Multi Server panel user role

        :rtype: parallels.plesk.hosting_repository.panel_user_role.PleskPanelUserRoleModel
        """
        return PleskPanelUserRoleModel(self.pms_management_server)

    @property
    def reseller(self):
        """Model of Plesk Multi Server reseller

        :rtype: parallels.plesk.plesk_multi_server.hosting_repository.reseller.PleskMultiServerResellerModel
        """
        return PleskMultiServerResellerModel()

    @property
    def customer(self):
        """Model of Plesk Multi Server customer

        :rtype: parallels.plesk.plesk_multi_server.hosting_repository.customer.PleskMultiServerCustomerModel
        """
        return PleskMultiServerCustomerModel(self.pms_management_server)

    @property
    def service_plan(self):
        """Model of Plesk Multi Server service plan

        :rtype: parallels.plesk.hosting_repository.service_plan.PleskServicePlanModel
        """
        return PleskServicePlanModel(self.pms_management_server)

    @property
    def service_plan_addon(self):
        """Model of Plesk Multi Server service plan add-on

        :rtype: parallels.core.hosting_repository.service_plan_addon.ServicePlanAddonModel
        """
        return PleskServicePlanAddonModel(self.pms_management_server)

    @property
    def subscription(self):
        """Model of Plesk Multi Server subscription

        :rtype: parallels.plesk.plesk_multi_server.hosting_repository.subscription.PleskMultiServerSubscriptionModel
        """
        return PleskMultiServerSubscriptionModel(self.pms_management_server)

    @property
    def domain(self):
        """Model of Plesk Multi Server add-on domain

        :rtype: parallels.plesk.plesk_multi_server.hosting_repository.domain.PleskMultiServerDomainModel
        """
        return PleskMultiServerDomainModel(self.pms_management_server)

    @property
    def subdomain(self):
        """Model of Plesk Multi Server subdomain

        :rtype: parallels.plesk.plesk_multi_server.hosting_repository.subdomain.PleskMultiServerSubdomainModel
        """
        return PleskMultiServerSubdomainModel(self.pms_management_server)

    @property
    def domain_alias(self):
        """Model of Plesk Multi Server domain alias

        :rtype: parallels.plesk.plesk_multi_server.hosting_repository.domain_alias.PleskMultiServerDomainAliasModel
        """
        return PleskMultiServerDomainAliasModel(self.pms_management_server)

    @property
    def virtual_hosting_settings(self):
        """Model of virtual hosting settings of domains

        :rtype: parallels.core.hosting_repository.virtual_hosting_settings.VirtualHostingSettingsModel
        """
        return PleskMultiServerVirtualHostingSettingsModel(self.pms_management_server)

    @property
    def mail_account(self):
        """Model of Plesk Multi Server mail account

        :rtype: parallels.plesk.plesk_multi_server.hosting_repository.mail_account.PleskMultiServerMailAccountModel
        """
        return PleskMultiServerMailAccountModel(self.pms_management_server)

    @property
    def database(self):
        """Model of Plesk Multi Server database

        :rtype: parallels.plesk.plesk_multi_server.hosting_repository.database.PleskMultiServerDatabaseModel
        """
        return PleskMultiServerDatabaseModel(self.pms_management_server)

    @property
    def database_user(self):
        """Model of Plesk Multi Server database user

        :rtype: parallels.plesk.plesk_multi_server.hosting_repository.database_user.PleskMultiServerDatabaseUserModel
        """
        return PleskMultiServerDatabaseUserModel(self.pms_management_server)

    @property
    def dns_record(self):
        """Model of Plesk Multi Server DNS record

        :rtype: parallels.plesk.hosting_repository.dns_record.PleskDnsRecordModel
        """
        return PleskDnsRecordModel(self.pms_management_server)

    @property
    def extension(self):
        """Model of Plesk Multi Server extension

        :rtype: parallels.plesk.hosting_repository.extension.PleskExtensionModel
        """
        return PleskExtensionModel(self.pms_management_server)

    @property
    def panel(self):
        """Model of Plesk Multi Server panel

        :rtype: parallels.plesk.hosting_repository.panel.PleskPanelModel
        """
        return PleskMultiServerPanelModel(self.pms_management_server)

    @property
    def tomcat(self):
        """Model of Java (Tomcat) applications

        :rtype: parallels.core.hosting_repository.tomcat.TomcatModel
        """
        return PleskMultiServerTomcatModel(self.pms_management_server)
