from django.contrib import admin
from polymorphic.admin import PolymorphicParentModelAdmin, PolymorphicChildModelAdmin, PolymorphicChildModelFilter
from pexp.models import *


class ProjectChildAdmin(PolymorphicChildModelAdmin):
    base_model = Project

    # On purpose, only have the shared fields here.
    # The fields of the derived model should still be displayed.
    base_fieldsets = (
        ("Base fields", {
            'fields': ('topic',)
        }),
    )

class ProjectAdmin(PolymorphicParentModelAdmin):
    base_model = Project
    list_filter = (PolymorphicChildModelFilter,)
    child_models = (
        (Project, ProjectChildAdmin),
        (ArtProject, ProjectChildAdmin),
        (ResearchProject, ProjectChildAdmin),
    )

admin.site.register(Project, ProjectAdmin)



class ModelAChildAdmin(PolymorphicChildModelAdmin):
    base_model = ModelA

class ModelAAdmin(PolymorphicParentModelAdmin):
    base_model = ModelA
    list_filter = (PolymorphicChildModelFilter,)
    child_models = (
        (ModelA, ModelAChildAdmin),
        (ModelB, ModelAChildAdmin),
        (ModelC, ModelAChildAdmin),
    )

admin.site.register(ModelA, ModelAAdmin)


if 'Model2A' in globals():
    class Model2AChildAdmin(PolymorphicChildModelAdmin):
        base_model = Model2A

    class Model2AAdmin(PolymorphicParentModelAdmin):
        base_model = Model2A
        list_filter = (PolymorphicChildModelFilter,)
        child_models = (
            (Model2A, Model2AChildAdmin),
            (Model2B, Model2AChildAdmin),
            (Model2C, Model2AChildAdmin),
        )

    admin.site.register(Model2A, Model2AAdmin)


if 'UUIDModelA' in globals():
    class UUIDModelAChildAdmin(PolymorphicChildModelAdmin):
        base_model = UUIDModelA

    class UUIDModelAAdmin(PolymorphicParentModelAdmin):
        base_model = UUIDModelA
        list_filter = (PolymorphicChildModelFilter,)
        child_models = (
            (UUIDModelA, UUIDModelAChildAdmin),
            (UUIDModelB, UUIDModelAChildAdmin),
            (UUIDModelC, UUIDModelAChildAdmin),
        )

    admin.site.register(UUIDModelA, UUIDModelAAdmin)


class ProxyChildAdmin(PolymorphicChildModelAdmin):
    base_model = ProxyBase

class ProxyAdmin(PolymorphicParentModelAdmin):
    base_model = ProxyBase
    list_filter = (PolymorphicChildModelFilter,)
    child_models = (
        (ProxyA, ProxyChildAdmin),
        (ProxyB, ProxyChildAdmin),
    )

admin.site.register(ProxyBase, ProxyAdmin)
