import json
from django.core.paginator import Paginator
from domain.dataset import DataSet
from imdb.models import CelebrityModel
from operator import contains


class Celebrity(DataSet):
    model = CelebrityModel

    def get_by_id_list(self, id_list):
        celebrity_list = self.model.objects.filter(pk__in=id_list)
        return celebrity_list

    def get_list_by_media_id(self, media_id):
        celebrity_list = self.model.objects.filter(pk=media_id)
        return celebrity_list

    def add(self, data):
        self.model(**data).save()

    def edit(self, celebrity_id, data):
        self.model.objects.filter(pk=celebrity_id).update(**data)

    @classmethod
    def get_list(cls, name="", page=1, page_size=20):
        if name:
            query = cls.model.objects.filter(name__startswith=name).order_by("-id")
        else:
            query = cls.model.objects.all().order_by("-id")

        pager = Paginator(query, page_size)
        data = {
            "total_page": pager.num_pages,
            "celebrity_list": cls.to_list(pager.get_page(page))
        }
        return data

    @classmethod
    def get_ids_by_name(cls, names):
        if len(names) == 1:
            if contains(names[0], "/"):
                names = names[0].split("/")
            else:
                names = names[0].split(" ")
        ids = []
        if names:
            for name in names:
                temp_model = cls.model.objects.filter(name=name).first()
                if not temp_model:
                    temp_model = cls.model.objects.create(name=name)
                ids.append(temp_model.id)
        return ids
