from domain.lsp.nmgydpa_domain import NmgYdPa
from injector.models import MediaExtFieldModel, MediaInfoSyncModel, MediaStorageModel
from domain.lsp.generated.common_xsd import Adi


class QShiNmgYdPa(NmgYdPa):
    Media_Required_Args = ("episodes", "name", "date_published", "category", "genres", "regions",
                           "storyline", "total_seconds", "languages", "year", "douban_score")

    def __init__(self, alias="QSHINMGYDPA"):
        super().__init__(alias)

    def check_series_header_args(self, media_id):
        media_ext = MediaExtFieldModel.objects.get(media_id=media_id)
        media_ext_args = ("media_horpic", "media_verpic")
        self.check_module_args(media_ext, media_ext_args)
        self.check_module_args(media_ext.media, self.Media_Required_Args)
        return

    def album(self, task_id, action="REGIST"):
        # 获取taskId
        task_id = str(task_id).split("_")[0]

        # 从MediaInfo中获取media信息
        info_sync = MediaInfoSyncModel.objects.filter(pk=task_id).select_related("media").first()
        media = info_sync.media
        media_ext = media.mediaextfieldmodel
        action = info_sync.action_description()

        media_storage = MediaStorageModel.objects.filter(media_id=media.id).last()

        series_code = self.code_factory.gen_series_code(media.id)
        series_picture_ver_code = self.code_factory.gen_media_vpic_code(media.id)
        series_picture_hor_code = self.code_factory.gen_media_hpic_code(media.id)
        vst, vet = self.get_media_effective_time(media.id)
        actors, directors, writers = self.get_media_person(media, actor=4, director=4, writer=2)
        param_dict = {"category": media.category}
        _category = self.injected_change.get_injected_fields(media.id, self.lsp_pk, param_dict)["category"]
        category = self._get_category_desc(_category)
        tags = self._get_tags(media)
        media_verpic = self.image_resize.get_oss_resize_params(self.partner_alias, media_ext.media_verpic,
                                                               size=media_ext.verpic_size, to_ip=True)
        media_horpic = self.image_resize.get_oss_resize_params(self.partner_alias, media_ext.media_horpic,
                                                               size=media_ext.horpic_size, to_ip=True)

        object_list = [
            {
                "property": [
                    {"Name": self.get_media_name(self.get_media_name_by_alias(media))},
                    {"LicensingWindowStart": vst},
                    {"LicensingWindowEnd": vet},
                    {"Status": 1},
                    {"SeriesType": 0},
                    {"ContentProvider": self.csp_id},
                    {"CpCode": self.csp_id},
                    {"OrgAirDate": media.date_published.replace("-", "")},
                    {"ActorDisplay": actors},
                    {"Director": directors},
                    {"WriterDisplay": writers},
                    # {"Type": category},
                    {"PgmCategory": category},
                    {"PgmSndClass": tags},
                    {"Tags": tags},
                    {"OriginalCountry": self.get_regions(media)},
                    {"Language": media.languages},
                    {"ReleaseYear": media.year},
                    {"SearchName": self.transform_chinese_to_letter(self.get_media_name(self.get_media_name_by_alias(media)))},
                    {"Rating": media.douban_score},
                    {"IsPositive": self._get_positive(media_storage)},
                    {"DefinitionFlag": self.gen_media_definition(media_ext.definition)},
                    {"SourceCode": self.csp_id},
                    {"Description": media.storyline},
                    {"VolumnCount": media.episodes},
                    {"CopyRight": self.csp_id},
                    {"ReleaseLicenseNumber": media_ext.approval_num},
                ],
                "element_type": "Series",
                "id": series_code,
                "code": series_code,
                "action": action
            },
            {
                "property": [
                    {"FileURL": self.to_ip_url(media_verpic)},
                ],
                "element_type": "Picture",
                "id": series_picture_ver_code,
                "code": series_picture_ver_code,
                "action": action
            }
        ]

        mapping_list = [
            {
                "property": [
                    {"Type": 1},
                ],
                "parent_type": "Picture",
                "parent_id": series_picture_ver_code,
                "parent_code": series_picture_ver_code,
                "element_type": "Series",
                "element_id": series_code,
                "element_code": series_code,
                "action": action,
            }
        ]

        data = {
            "namesp": "http://www.w3.org/2001/XMLSchema-instance",
            "object_list": object_list,
            "mapping_list": mapping_list
        }
        xml = Adi.to_xml(data, flag="scope")
        return xml
