from django.contrib import admin
# Register your models here.
from django.db.models import Q

from trade.models import TradeOrder, TradeWorker, TradeLog, SinglePlayerTradeOrder, SinglePlayerTradeWorker, \
    ConsoleTradeOneQuality, ConsoleTradeOneCard, ConsoleTradeOneLog, ConsoleTradeOneHistory, WebTradeHistory, \
    WebTradeInfo, WebTradePlayerQuality, WebTradeConsumableQuality, WebTradeQuality, ConsoleTradeInvestDailyProfitLog, \
    ConsoleInvestTradeItemsCountLog


class TradeOrderAdmin(admin.ModelAdmin):
    list_display = ['create_time', 'file_name', 'status']


class TradeWorkerAdmin(admin.ModelAdmin):
    autocomplete_fields = ['fifa_account']
    search_fields = ['fifa_account__user_name']
    list_display = ['trade_order', 'is_done', 'status']


class TradeLogAdmin(admin.ModelAdmin):
    autocomplete_fields = ['trade_worker']
    list_display = ['trade_worker', 'create_time', 'bid_price', 'sell_price', 'player_card', 'sell_time',
                    'expires', 'status']


class SinglePlayerTradeOrderAdmin(admin.ModelAdmin):
    list_display = ['create_time', 'file_name', 'status']


class SinglePlayerTradeWorkerAdmin(admin.ModelAdmin):
    autocomplete_fields = ['player_card', 'unused_fifa_accounts', 'used_fifa_accounts']
    list_display = ['trade_order', 'player_card', 'is_done', 'status']


class ConsoleTradeOneQualityAdmin(admin.ModelAdmin):
    autocomplete_fields = ['fifa_account']
    list_display = ['name', 'bid_price', 'sell_price', 'create_time', 'auto_next_create', 'dynamic_upper_price']
    list_filter = ['name']


class ConsoleTradeOneCardAdmin(admin.ModelAdmin):
    autocomplete_fields = ['fifa_account']
    search_fields = ['fifa_account__user_name']
    list_display = ['fifa_account', 'bid_price', 'sell_price', 'create_time', 'quality', 'list_try_count']
    list_filter = ['deleted', 'quality__name']


class SpecialTradeOneLogsListFilter(admin.SimpleListFilter):
    # Human-readable title which will be displayed in the
    # right admin sidebar just above the filter options.
    title = 'Special Log'

    parameter_name = 'special'

    def lookups(self, request, model_admin):
        return (
            ('only_credit', 'Only Credit'),
        )

    def queryset(self, request, queryset):
        if self.value() == 'only_credit':
            return queryset.filter(Q(description__startswith='before running trade') |
                                   Q(description__startswith='after running trade') |
                                   Q(description__startswith='before buying items') |
                                   Q(description__startswith='after selling items'))
        return queryset


class ConsoleTradeOneLogAdmin(admin.ModelAdmin):
    autocomplete_fields = ['fifa_account']
    list_display = ['fifa_account', 'create_time', 'description']
    search_fields = ['fifa_account__user_name']
    list_filter = [SpecialTradeOneLogsListFilter, ]


class SpecialConsoleTradeOneHistoryListFilter(admin.SimpleListFilter):
    title = 'Special Log'

    parameter_name = 'special'

    def lookups(self, request, model_admin):
        return (
            ('only_complete', 'Only Complete'),
            ('web_app_checked', 'Only Web App Checked'),
            ('invest_trade', 'Invest Trade Active')
        )

    def queryset(self, request, queryset):
        if self.value() == 'only_complete':
            return queryset.filter(credit_after__gt=0)
        if self.value() == 'web_app_checked':
            return queryset.exclude(move_items_from_unassigned=None)
        if self.value() == 'invest_trade':
            return queryset.filter(id__in=queryset.filter(
                fifa_account__run_console_invest_trade_one=True
            ).order_by('fifa_account', '-id').distinct('fifa_account').values('id'))
        return queryset


class ConsoleTradeOneHistoryAdmin(admin.ModelAdmin):
    autocomplete_fields = ['fifa_account']
    list_display = ['account', 'create_time', 'console', 'quality_name', 'bid_price', 'sell_p',
                    'bid_count', 'win_count', 'credit_before',
                    'current_profit', 'current_club_transfer_cards', 'update_time', 'unassigned', ]
    search_fields = ['fifa_account__console__name__iexact', 'fifa_account__user_name__iexact']
    list_filter = [SpecialConsoleTradeOneHistoryListFilter, 'quality_name']

    # def get_queryset(self, request):
    #     query = super().get_queryset(request)
    #     query = query.filter(Q(fifa_account__delete_console_reason=None) | Q(fifa_account__delete_console_reason=''))
    #     return query

    def account(self, obj):
        return obj.fifa_account.user_name

    account.admin_order_field = 'fifa_account'

    def account_and_console(self, obj):
        return f'{obj.fifa_account.user_name} {obj.fifa_account.console.name}'

    def profit(self, obj):
        if obj.credit_before and obj.credit_after:
            return obj.credit_after - obj.credit_before
        return 0

    def current_profit(self, obj):
        if obj.credit_before and obj.current_credit:
            return obj.current_credit - obj.credit_before
        return 0

    def console(self, obj):
        if obj.fifa_account.console:
            return obj.fifa_account.console.name
        return '-'

    def current_club_transfer_cards(self, obj):
        if obj.fifa_account.console_trade_one_quality == 'bronze1':
            return obj.club_bronze1_items + obj.transfer_list_items_count
        elif obj.fifa_account.console_trade_one_quality == 'silver1':
            return obj.club_silver1_items + obj.transfer_list_items_count
        elif obj.fifa_account.console_trade_one_quality == 'gold0':
            return obj.club_gold0_items + obj.transfer_list_items_count
        elif obj.fifa_account.console_trade_one_quality == 'gold1':
            return obj.club_gold1_items + obj.transfer_list_items_count
        return '-'

    current_club_transfer_cards.short_description = 'Stock'

    def unassigned(self, obj):
        return obj.unassigned_item_count

    def sell_p(self, obj):
        return obj.current_sell_price

    sell_p.short_description = 'Sell Price'

    console.admin_order_field = 'fifa_account__console'


class WebTradePlayerQualityAdmin(admin.ModelAdmin):
    list_display = ['asset_id', 'rarity_ids', 'position', 'chemistry_style', 'level', 'nation', 'league', 'team', ]


class WebTradeConsumableQualityAdmin(admin.ModelAdmin):
    list_display = ['category', 'level']


class WebTradeQualityAdmin(admin.ModelAdmin):
    list_display = ['name', 'player_quality', 'consumable_quality', 'zero_price', 'bid_price', 'sell_price',
                    'sell_next_grades', 'auto_next_create', 'dynamic_upper_price', ]


class WebTradeHistoryAdmin(admin.ModelAdmin):
    autocomplete_fields = ['web_trade_info']
    list_display = ['fifa_account', 'create_time', 'bid_price',
                    'sell_price', 'bid_count', 'win_count', 'credit_before', 'credit_after', 'profit']
    search_fields = ['web_trade_info__fifa_account__user_name__iexact']
    list_filter = []

    def fifa_account(self, obj):
        return obj.web_trade_info.fifa_account.user_name

    def profit(self, obj):
        if obj.credit_before and obj.credit_after:
            return obj.credit_after - obj.credit_before
        return 0


class WebTradeInfoAdmin(admin.ModelAdmin):
    autocomplete_fields = ['fifa_account']
    list_display = ['create_time', 'fifa_account', 'quality_name', 'run_trade', 'is_running_trade']
    search_fields = ['fifa_account__user_name__iexact']
    actions = ['delete_from_list']

    @admin.action(description='Set is Deleted')
    def delete_from_list(self, request, queryset):
        queryset.update(deleted=True)


class ConsoleTradeInvestDailyProfitLogAdmin(admin.ModelAdmin):
    autocomplete_fields = ['fifa_account', 'current_trade_history']
    list_display = ['create_time', 'fifa_account', 'current_credit', 'today_forcast', 'current_trade_history_win_count',
                    'today_sell_count', 'credit_change', 'forcast_change', 'quality_name']
    search_fields = ['fifa_account__user_name__iexact']


class ConsoleInvestTradeItemsCountLogAdmin(admin.ModelAdmin):
    autocomplete_fields = ['fifa_account']
    list_display = ['create_time', 'fifa_account']
    search_fields = ['fifa_account__user_name__iexact']

admin.site.register(TradeOrder, TradeOrderAdmin)
admin.site.register(TradeWorker, TradeWorkerAdmin)
admin.site.register(TradeLog, TradeLogAdmin)
admin.site.register(SinglePlayerTradeOrder, SinglePlayerTradeOrderAdmin)
admin.site.register(SinglePlayerTradeWorker, SinglePlayerTradeWorkerAdmin)
admin.site.register(ConsoleTradeOneQuality, ConsoleTradeOneQualityAdmin)
admin.site.register(ConsoleTradeOneCard, ConsoleTradeOneCardAdmin)
admin.site.register(ConsoleTradeOneLog, ConsoleTradeOneLogAdmin)
admin.site.register(ConsoleTradeOneHistory, ConsoleTradeOneHistoryAdmin)

admin.site.register(WebTradePlayerQuality, WebTradePlayerQualityAdmin)
admin.site.register(WebTradeConsumableQuality, WebTradeConsumableQualityAdmin)
admin.site.register(WebTradeQuality, WebTradeQualityAdmin)
admin.site.register(WebTradeHistory, WebTradeHistoryAdmin)
admin.site.register(WebTradeInfo, WebTradeInfoAdmin)
admin.site.register(ConsoleTradeInvestDailyProfitLog, ConsoleTradeInvestDailyProfitLogAdmin)
admin.site.register(ConsoleInvestTradeItemsCountLog, ConsoleInvestTradeItemsCountLogAdmin)
