from django.db import models

from cms.models import CMSPlugin


class SomeParent:
    pass


class TestPluginAlphaModel(SomeParent, CMSPlugin):
    """
    Nothing interesting here, move along.
    """
    alpha = models.CharField('name', blank=False, default='test plugin alpha', max_length=32)

    def get_add_url(self):
        return '/admin/custom/view/'

    def get_edit_url(self):
        return '/admin/custom/view/%s/' % self.pk

    def get_move_url(self):
        return '/admin/custom/move/'

    def get_delete_url(self):
        return '/admin/custom/delete/%s/' % self.pk

    def get_copy_url(self):
        return '/admin/custom/copy/'


class ProxiedAlphaPluginModel(TestPluginAlphaModel):
    """
    This is a proxied model
    """
    class Meta:
        proxy = True


class TestPluginBetaModel(TestPluginAlphaModel):
    """
    NOTE: This is the subject of our test. A plugin which inherits from
    another concrete plugin via MTI or Multi-Table Inheritance.
    """
    beta = models.CharField('name', blank=False, default='test plugin beta', max_length=32)


class ProxiedBetaPluginModel(TestPluginBetaModel):
    """
    This is a proxied model
    """
    class Meta:
        proxy = True


class AbstractPluginParent(CMSPlugin):
    """
    Abstract class
    """
    abs = models.CharField('abs', blank=False, default='test plugin abs', max_length=32)

    class Meta:
        abstract = True


class TestPluginGammaModel(AbstractPluginParent):
    """
    Concrete class of an abstract parent
    """
    gamma = models.CharField('gamma', blank=False, default='test plugin gamma', max_length=32)


class NonPluginModel(models.Model):
    """
    Non plugin base class
    """
    other_id = models.AutoField(primary_key=True)
    non_plugin = models.CharField('non plugin', blank=False, default='test non plugin', max_length=32)


class MixedPlugin(AbstractPluginParent, NonPluginModel):
    """
    Plugin which inherits from one abstract and one concrete model
    """
    mixed = models.CharField('mixed', blank=False, default='test plugin mixed', max_length=32)


class LessMixedPlugin(CMSPlugin, NonPluginModel):
    """
    Plugin which inherits from two concrete models, one of which is CMSPlugin
    """
    less_mixed = models.CharField('mixed', blank=False, default='test plugin mixed', max_length=32)
