from rest_framework import serializers
from .models import *
from organisations.models import Organisation, OrganisationSetting
from organisations.serializers import OrganisationSerializer
from customers.serializers import CustomerSerializer
from customers.models import GroupMembership

class SMSTypesSerializer(serializers.ModelSerializer):
    id = serializers.IntegerField(read_only=True)
    
    class Meta:
        model = SMSTypes
        fields = '__all__'

class SMSRequestSerializer(serializers.ModelSerializer):
    requested_by   = serializers.CharField(read_only=True)
    requester_name = serializers.CharField(source='requested_by.user_staff',read_only=True)
    request_status = serializers.CharField(source = 'sms_type.status', read_only=True)
    organisation   = serializers.CharField(read_only=True)
    organisation_details = serializers.SerializerMethodField(read_only=True)


    def get_organisation_details(self, sms_request):
        organisation_details = Organisation.objects.get(pk=sms_request.organisation.id)
        if organisation_details:
            return {"name":organisation_details.name,"short_name":organisation_details.short_name,"registration_no":organisation_details.registration_no,
                "city": organisation_details.city,"address":organisation_details.address,"country":organisation_details.country,
                "region": organisation_details.region,"status": organisation_details.status, "email":organisation_details.email, "phone_number":organisation_details.phone_number}
        return {"name":"", "short_name":"","registration_no":"","city":"","address":"","country":"","region":"", "status":"", "email":"", "phone_number":""}
    
    class Meta:
        model = SMSRequest
        fields = '__all__'

class OrganisationFreeSmsAwardSerializer(serializers.ModelSerializer):
    organisation_name = serializers.CharField(source='organisation.name',read_only=True)
    added_by = serializers.CharField(read_only=True)
    updated_by = serializers.CharField(read_only=True)
    added_by_name  = serializers.CharField(source='added_by.user_staff.name',read_only=True)
    unit_sms_cost  = serializers.SerializerMethodField()

    def get_unit_sms_cost(self, obj):
        unit_sms_cost_obj = OrganisationSetting.objects.filter(org_setting=obj.organisation,setting_key='unit_sms_cost').first()
        if unit_sms_cost_obj:
            return unit_sms_cost_obj.setting_value
        return 0
    
    class Meta:
        model = OrganisationFreeSmsAward
        fields = '__all__'



class OrganisationSmsSubscriptionSerializer(serializers.ModelSerializer):
    sms_type_name = serializers.CharField(source='sms_type.sms_type_name', read_only=True)
    sms_type_key  = serializers.CharField(source='sms_type.sms_type_key', read_only=True)
    added_by_name = serializers.CharField(source='added_by.user_staff.name', read_only=True)
    last_updated_by_name = serializers.CharField(source='last_updated_by.user_staff.name', read_only=True)

    class Meta:
        model    = OrganisationSmsSubscription
        fields   = '__all__'

class MemberSmsSubscriptionSerializer(serializers.ModelSerializer):
    customer_branch            = serializers.CharField(source='customer.customer_branch',read_only=True)
    customer_branch_id         = serializers.CharField(source='customer.customer_branch.id',read_only=True)
    customer_name              = serializers.CharField(source='customer.name',read_only=True)
    customer_member_number     = serializers.CharField(source='customer.member_number',read_only=True)
    customer_old_member_number = serializers.CharField(source='customer.old_member_number',read_only=True)
    customer_type_name         = serializers.CharField(source='customer.branch_customer_type.customer_type',read_only=True)
    customer_phone_number       = serializers.CharField(source='customer.telephone',read_only=True)
    sms_type_name = serializers.CharField(source='sms_type.sms_type_name', read_only=True)
    sms_type_key  = serializers.CharField(source='sms_type.sms_type_key', read_only=True)
    added_by_name = serializers.CharField(source='added_by.user_staff.name', read_only=True)
    last_updated_by_name = serializers.CharField(source='last_updated_by.user_staff.name', read_only=True)
    assigned_group = CustomerSerializer(read_only=True, required=False)

    class Meta:
        model    = MemberSmsSubscription
        fields   = '__all__'

def get_assigned_group(self, customer):
        membership = GroupMembership.objects.filter(member=customer).first()
        if membership:
           return {"id":membership.id,"group_id":membership.group.id,"group_name":membership.group.name}
        else:
            return {}
        
class UserSmsSerializer(serializers.ModelSerializer):
    branch        = serializers.SerializerMethodField(read_only=True, required=False)
    reciever_name = serializers.SerializerMethodField(read_only=True, required=False)

    class Meta:
        model    = UserSms
        fields   = '__all__'

    def get_branch(self, sms):
        return sms.branch.name
    
    def get_reciever_name(self, sms):
        reciever_name = sms.reciever_name
        if sms.recieved_by_type == 'customer':
            customer = Customer.objects.get(pk=sms.recieved_by)
            if customer:
                reciever_name = customer.name
        return reciever_name
''' class CustomerFreeSmsAwardSerializer(serializers.ModelSerializer):
    class Meta:
        model    = CustomerFreeSmsAward
        fields   = '__all__' '''

