# -*- coding: utf-8 -*-

from django.conf import settings
from django.contrib import admin
from django_admin import DeleteModelAdmin

from account.models import UserInfo
from member.models import (GoodsInfo, GoodsOrderInfo, MemberActivityContributionInfo,
                           MemberActivityContributionWelfareInfo, MemberActivityContributionWelfareUnlockingInfo,
                           MemberActivityGroupShareInfo, MemberActivityInfo, MemberActivitySigninInfo,
                           MemberActivitySignupInfo, RightInfo, ShotTypeInfo)
from pre.custom_message import sendwxasubscribemessage
from utils.redis.rshot import update_member_shot_data


class GoodsInfoAdmin(admin.ModelAdmin):
    list_display = ('good_id', 'good_type', 'title', 'value', 'left_num', 'coupon_id', 'image', 'is_slider', 'slider_image', 'integral', 'fee', 'minlevel', 'only_for_member', 'only_once', 'position', 'is_upload_qiniu', 'status', 'created_at', 'updated_at')
    list_filter = ('good_type', 'is_slider', 'only_for_member', 'only_once', 'is_upload_qiniu', 'status')


class GoodsOrderInfoAdmin(admin.ModelAdmin):
    list_display = ('order_id', 'user_id', 'good_id', 'good_type', 'title', 'name', 'phone', 'address', 'tracking_number', 'send_template_message_res', 'has_send_template_message', 'integral', 'status', 'created_at', 'updated_at')
    list_filter = ('good_type', 'status')

    def save_model(self, request, obj, form, change):
        obj.save()

        if obj.good_type != GoodsInfo.PHYSICAL or not obj.tracking_number or obj.has_send_template_message:
            return

        obj.has_send_template_message = True
        obj.save()

        # 校验用户是否存在
        try:
            user = UserInfo.objects.get(user_id=obj.user_id)
        except UserInfo.DoesNotExist:
            return

        # TODO: 立即推送模版消息,兑换成功,快递已发送(商品,快递单号,扣除的积分)
        data = {
            "thing6": {
                "value": obj.title,
                "color": "#173177"
            },
            "character_string7": {
                "value": obj.tracking_number,
                "color": "#173177"
            },
            "number2": {
                "value": obj.integral,
                "color": "#173177"
            },
            "thing5": {
                "value": u"您的礼品正在快马加鞭赶来,请耐心等待呦~",
                "color": "#173177"
            },
        }

        sendwxasubscribemessage(openid=user.openid_miniapp, template_id=settings.TEMPLATE_ID_TRACKING, data=data, miniprogram_state=None, lang=None, page=None)


class RightInfoAdmin(admin.ModelAdmin):
    list_display = ('right_id', 'right_type', 'icon', 'title', 'subtitle', 'detail', 'level1', 'level2', 'level3', 'level4', 'level5', 'minlevel', 'position', 'is_send_coupon', 'coupon_num', 'coupon_level1_id', 'coupon_level2_id', 'coupon_level3_id', 'status', 'created_at', 'updated_at')
    list_filter = ('right_type', 'is_send_coupon', 'is_continue_send_coupon', 'status')


class ShotTypeInfoAdmin(DeleteModelAdmin, admin.ModelAdmin):
    list_display = ('shot_type_id', 'shot_type_name', 'position', 'status', 'created_at', 'updated_at')

    def save_model(self, request, obj, form, change):
        obj.save()
        update_member_shot_data()

    def delete_model(self, request, obj):
        obj.delete()
        update_member_shot_data()


class MemberActivityInfoAdmin(admin.ModelAdmin):
    list_display = ('activity_id', 'activity_type', 'title', 'subtitle', 'date', 'start_date', 'end_date', 'start_display_date', 'end_display_date', 'city', 'location', 'lat', 'lon', 'is_slider', 'slider_image', 'cover', 'limit_image_num', 'share_img_link', 'share_h5_link', 'is_signup', 'activity_state', 'position', 'is_upload_qiniu', 'status', 'created_at', 'updated_at')
    list_filter = ('activity_type', 'is_slider', 'is_signup', 'activity_state', 'is_upload_qiniu', 'status')


class MemberActivitySignupInfoAdmin(admin.ModelAdmin):
    list_display = ('signup_id', 'activity_id', 'title', 'name', 'phone', 'status', 'created_at', 'updated_at')


class MemberActivitySignupInfoAdmin(admin.ModelAdmin):
    list_display = ('signup_id', 'user_id', 'activity_id', 'title', 'name', 'phone', 'status', 'created_at', 'updated_at')


class MemberActivitySigninInfoAdmin(admin.ModelAdmin):
    list_display = ('signin_id', 'user_id', 'activity_id', 'title', 'status', 'created_at', 'updated_at')


class MemberActivityGroupShareInfoAdmin(admin.ModelAdmin):
    list_display = ('group_share_id', 'activity_id', 'share_user_id', 'click_user_id', 'open_gid', 'title', 'is_integral', 'integral', 'status', 'created_at', 'updated_at')
    list_filter = ('is_integral', 'status')


class MemberActivityContributionInfoAdmin(admin.ModelAdmin):
    list_display = ('contribution_id', 'user_id', 'activity_id', 'content_type', 'title', 'content', 'user_name', 'user_avatar', 'images', 'video_url', 'audit_status', 'is_selected', 'status', 'created_at', 'updated_at')
    list_filter = ('activity_id', 'content_type', 'audit_status', 'is_selected', 'status')


class MemberActivityContributionWelfareInfoAdmin(admin.ModelAdmin):
    list_display = ('welfare_id', 'activity_id', 'welfare_type', 'welfare_title', 'welfare_detail', 'welfare_value', 'welfare_image', 'status', 'created_at', 'updated_at')
    list_filter = ('activity_id', 'welfare_type', 'status')


class MemberActivityContributionWelfareUnlockingInfoAdmin(admin.ModelAdmin):
    list_display = ('unlocking_id', 'admin_id', 'user_id', 'activity_id', 'contribution_id', 'welfare_id', 'welfare_type', 'welfare_value', 'name', 'phone', 'address', 'tracking_number', 'is_handled', 'status', 'created_at', 'updated_at')
    list_filter = ('admin_id', 'activity_id', 'welfare_id', 'is_handled', 'status')


admin.site.register(GoodsInfo, GoodsInfoAdmin)
admin.site.register(GoodsOrderInfo, GoodsOrderInfoAdmin)
admin.site.register(RightInfo, RightInfoAdmin)
admin.site.register(ShotTypeInfo, ShotTypeInfoAdmin)
admin.site.register(MemberActivityInfo, MemberActivityInfoAdmin)
admin.site.register(MemberActivitySignupInfo, MemberActivitySignupInfoAdmin)
admin.site.register(MemberActivitySigninInfo, MemberActivitySigninInfoAdmin)
admin.site.register(MemberActivityGroupShareInfo, MemberActivityGroupShareInfoAdmin)
admin.site.register(MemberActivityContributionInfo, MemberActivityContributionInfoAdmin)
admin.site.register(MemberActivityContributionWelfareInfo, MemberActivityContributionWelfareInfoAdmin)
admin.site.register(MemberActivityContributionWelfareUnlockingInfo, MemberActivityContributionWelfareUnlockingInfoAdmin)