# -*- coding: utf-8 -*-
from django.contrib import admin
from django.utils.html import format_html

from .models import Order


@admin.register(Order)
class OrderAdmin(admin.ModelAdmin):
    list_display = (
        'order_no', 'created_at', 'customer_name', 'phone_link',
        'color', 'quantity', 'delivery_area', 'total_taka', 'status',
    )
    list_display_links = ('order_no', 'customer_name')
    list_filter = ('status', 'color', 'delivery_area', 'created_at')
    search_fields = ('order_no', 'customer_name', 'phone', 'phone_typed', 'address')
    date_hierarchy = 'created_at'
    list_per_page = 50
    list_editable = ('status',)
    ordering = ('-created_at',)

    readonly_fields = (
        'order_no', 'created_at', 'updated_at',
        'product_name', 'product_name_en', 'product_sku',
        'unit_price', 'subtotal', 'delivery_charge', 'total',
        'gift', 'ip_address', 'user_agent', 'phone_typed',
    )

    fieldsets = (
        ('Order', {
            'fields': ('order_no', 'status', 'created_at', 'updated_at'),
        }),
        ('Customer', {
            'fields': ('customer_name', 'phone', 'phone_typed', 'address', 'country'),
        }),
        ('Product & money', {
            'fields': ('product_name', 'product_name_en', 'product_sku',
                       'color', 'quantity', 'unit_price', 'subtotal',
                       'delivery_area', 'delivery_charge', 'total'),
        }),
        ('Free gift', {
            'fields': ('gift', 'gift_size'),
        }),
        ('Note', {
            'fields': ('admin_note',),
        }),
        ('Technical', {
            'classes': ('collapse',),
            'fields': ('ip_address', 'user_agent'),
        }),
    )

    @admin.display(description='Mobile', ordering='phone')
    def phone_link(self, obj):
        if not obj.dialable_phone:
            return obj.phone
        return format_html('<a href="tel:{}">{}</a>', obj.dialable_phone, obj.phone)

    @admin.display(description='Total', ordering='total')
    def total_taka(self, obj):
        return 'Tk {:,}'.format(obj.total)

    # ---- bulk actions ----
    @admin.action(description='Mark selected orders as Confirmed')
    def mark_confirmed(self, request, queryset):
        updated = queryset.update(status=Order.STATUS_CONFIRMED)
        self.message_user(request, '%d order(s) marked as confirmed.' % updated)

    @admin.action(description='Mark selected orders as Shipped')
    def mark_shipped(self, request, queryset):
        updated = queryset.update(status=Order.STATUS_SHIPPED)
        self.message_user(request, '%d order(s) marked as shipped.' % updated)

    @admin.action(description='Mark selected orders as Delivered')
    def mark_delivered(self, request, queryset):
        updated = queryset.update(status=Order.STATUS_DELIVERED)
        self.message_user(request, '%d order(s) marked as delivered.' % updated)

    @admin.action(description='Mark selected orders as Cancelled')
    def mark_cancelled(self, request, queryset):
        updated = queryset.update(status=Order.STATUS_CANCELLED)
        self.message_user(request, '%d order(s) marked as cancelled.' % updated)

    actions = ['mark_confirmed', 'mark_shipped', 'mark_delivered', 'mark_cancelled']

    def has_add_permission(self, request):
        # Orders arrive from the website; nothing is typed in by hand here.
        return False
