import json
from pygments import highlight
from pygments.lexers.data import JsonLexer
from pygments.formatters.html import HtmlFormatter
from ajax_select import make_ajax_form
from django.contrib import admin
from django.utils.translation import ugettext_lazy as _
from django.utils.safestring import mark_safe
from commonnet.admin_site import admin_site
from commcrawler import models
class CrawlAdmin(admin.ModelAdmin):
    model = models.Crawl
    list_display = ("name", "status", "target_nb", "created", "started",
                    "ended")
    list_filter = ("status",)
    readonly_fields = ("status", "created", "started", "ended")
    form = make_ajax_form(model, {'targets': 'target'})
admin_site.register(models.Crawl, CrawlAdmin)
class CrawlResultAdmin(admin.ModelAdmin):
    model = models.CrawlResult
    list_display = ("target", "crawl", "started", "duration", "status",
                    "is_online")
    list_filter = ("status", "crawl")
    search_fields = ("target__name",)
    readonly_fields = (
        "started", "duration", "status", "nb_external_link", "nb_internal_link",
        "nb_images", "nb_facebook", "nb_twitter", "nb_instagram", "nb_youtube",
        "nb_dailymotion", "nb_vimeo", "nb_video", "nb_audio", "nb_internal_pdf",
        "nb_external_pdf", "nb_internal_office", "nb_external_office",
        "is_online", "redirection", "crawl_result_prettified"
    )
    exclude = ("crawl_result",)
    form = make_ajax_form(model, {'target': 'target'})
    def crawl_result_prettified(self, instance):
        response = json.dumps(instance.crawl_result, sort_keys=True, indent=2)
        formatter = HtmlFormatter(style='colorful')
        response = highlight(response, JsonLexer(), formatter)
        style = "
"
        return mark_safe(style + response)
    crawl_result_prettified.short_description = _("Crawl result")
admin_site.register(models.CrawlResult, CrawlResultAdmin)
class CrawlLinkAdmin(admin.ModelAdmin):
    model = models.CrawlLink
    list_display = ("result", "link")
admin_site.register(models.CrawlLink, CrawlLinkAdmin)
class CrawlRelationAdmin(admin.ModelAdmin):
    model = models.CrawlRelation
    list_display = ("crawl", "source", "destination", "number")
    list_filter = ("crawl",)
    search_fields = ["source__name", "destination__name"]
    form = make_ajax_form(model, {'source': 'target', 'destination': 'target'})
admin_site.register(models.CrawlRelation, CrawlRelationAdmin)
class ExcludedDomainAdmin(admin.ModelAdmin):
    list_display = ('domain',)
    search_fields = ('domain',)
admin_site.register(models.ExludedDomains, ExcludedDomainAdmin)