from rest_framework import serializers
from mfire.models import *
from api.utils import *
from django.core.exceptions import ValidationError


class ProductSerializer(serializers.ModelSerializer):
    class Meta:
        model = Product
        fields = '__all__'
        
class ProfileSerializer(serializers.ModelSerializer):
    class Meta:
        model = User
        fields = '__all__'
        
class ClientSerializer(serializers.ModelSerializer):
    company_name = serializers.ReadOnlyField(source='clientid.company')
    class Meta:
        model = SiteModelProduct
        fields = ['clientid','company_name']
        
class LoginSerializer(serializers.ModelSerializer):
    email = serializers.EmailField(max_length=255)
    class Meta:
        model = User
        fields = ['id','email','password']
        
    #Scan Product main table
        
class ProductScaneSerializer(serializers.ModelSerializer):
    client_name = serializers.ReadOnlyField(source='clientid.company')
    class Meta:
        model = SiteModelProduct
        fields = ['client_name','pid','location']
        
    #Scan Product ***********
    
# new hpcl product
class Product10ScaneSerializer(serializers.ModelSerializer):
    codeno = serializers.ReadOnlyField(source='smpid.modelno')
    product_id = serializers.ReadOnlyField(source='smpid.pid.id')
    location = serializers.ReadOnlyField(source='smpid.location')
    unit = serializers.ReadOnlyField(source='smpid.unit')
    emp_name = serializers.ReadOnlyField(source='empid.get_full_name')
    class Meta:
        model = FireExtinguisherHPCL
        fields = "__all__"
        
class Product11ScaneSerializer(serializers.ModelSerializer):
    codeno = serializers.ReadOnlyField(source='smpid.modelno')
    product_id = serializers.ReadOnlyField(source='smpid.pid.id')
    location = serializers.ReadOnlyField(source='smpid.location')
    unit = serializers.ReadOnlyField(source='smpid.unit')
    # emp_name = serializers.ReadOnlyField(source='empid.get_full_name')
    class Meta:
        model = FireHydrantHPCL
        fields = "__all__"
# end
        
class Product1ScaneSerializer(serializers.ModelSerializer):
    feno = serializers.ReadOnlyField(source='smpid.modelno')
    product_id = serializers.ReadOnlyField(source='smpid.pid.id')
    class Meta:
        model = SiteModelProductDetailHistory
        fields = "__all__"
        #exclude = ['id','empid','clientid','sparepartrequired','remarks','sparepartitemrequired','client_image','client_comment','comment','image','location','createdate','updatedate']
    
        
class Product2ScaneSerializer(serializers.ModelSerializer):
    feno = serializers.ReadOnlyField(source='smpid.modelno')
    product_id = serializers.ReadOnlyField(source='smpid.pid.id')
    class Meta:
        model = FireHydrantHistory
        fields = "__all__"
        
        
class Product3ScaneSerializer(serializers.ModelSerializer):
    feno = serializers.ReadOnlyField(source='smpid.modelno')
    product_id = serializers.ReadOnlyField(source='smpid.pid.id')
    class Meta:
        model = HoseReelHistory
        fields = "__all__"
        
        
class Product4ScaneSerializer(serializers.ModelSerializer):
    feno = serializers.ReadOnlyField(source='smpid.modelno')
    product_id = serializers.ReadOnlyField(source='smpid.pid.id')
    class Meta:
        model = FireBucketHistory
        fields = "__all__"
        
        
class Product5ScaneSerializer(serializers.ModelSerializer):
    feno = serializers.ReadOnlyField(source='smpid.modelno')
    product_id = serializers.ReadOnlyField(source='smpid.pid.id')
    class Meta:
        model = FirePumpHistory
        fields = "__all__"
        
        
class Product6ScaneSerializer(serializers.ModelSerializer):
    feno = serializers.ReadOnlyField(source='smpid.modelno')
    product_id = serializers.ReadOnlyField(source='smpid.pid.id')
    class Meta:
        model = FireDetectionHistory
        fields = "__all__"
        
        
class Product7ScaneSerializer(serializers.ModelSerializer):
    feno = serializers.ReadOnlyField(source='smpid.modelno')
    product_id = serializers.ReadOnlyField(source='smpid.pid.id')
    class Meta:
        model = PortableMonitorHistory
        fields = "__all__"
        
        
class Product8ScaneSerializer(serializers.ModelSerializer):
    feno = serializers.ReadOnlyField(source='smpid.modelno')
    product_id = serializers.ReadOnlyField(source='smpid.pid.id')
    class Meta:
        model = SuppresionSystemHistory
        fields = "__all__"
        
        
class Product9ScaneSerializer(serializers.ModelSerializer):
    feno = serializers.ReadOnlyField(source='smpid.modelno')
    product_id = serializers.ReadOnlyField(source='smpid.pid.id')
    class Meta:
        model = ControlValveHistory
        fields = "__all__"
        
    # post data **********
        
class Product1hisScaneSerializer(serializers.ModelSerializer):
    #image = Base64ImageField()
    class Meta:
        model = SiteModelProductDetailHistory
        fields = "__all__"
        #fields = ['smpid','clientid','empid','image','location','sparepartrequired','sparepartitemrequired','remarks','duedatehpt','lastdatehpt','lastdaterefilling','duedaterefiiling','client_comment','client_image']
        
class Product2hisScaneSerializer(serializers.ModelSerializer):
    #image = Base64ImageField()
    class Meta:
        model = FireHydrantHistory
        fields = "__all__"
        #fields = ['smpid','clientid','empid','image','location','sparepartrequired','sparepartitemrequired','observation','remarks','hosepipe','hydrantvalve','blackcap','shuntwheel','hosebox','hoses','glasses','branchpipe','fire_hydrant_keys','glasshammer','client_comment','client_image']
        
class Product3hisScaneSerializer(serializers.ModelSerializer):
    #image = Base64ImageField()
    class Meta:
        model = HoseReelHistory
        fields = "__all__"
        #fields = ['smpid','clientid','empid','image','location','sparepartrequired','sparepartitemrequired','observation','remarks','hosereel','shutoffnozzel','ballvalve','jubliclip','connectingrubberhose','client_comment','client_image']
        
class Product4hisScaneSerializer(serializers.ModelSerializer):
    #image = Base64ImageField()
    class Meta:
        model = FireBucketHistory
        fields = "__all__"
        #fields = ['smpid','clientid','empid','image','location','sparepartrequired','sparepartitemrequired','observation','remarks','numberoffirebuckets','buckets','stand','sand','client_comment','client_image']
        
class Product5hisScaneSerializer(serializers.ModelSerializer):
    #image = Base64ImageField()
    class Meta:
        model = FirePumpHistory
        fields = "__all__"
        #fields = ['smpid','clientid','empid','image','location','sparepartrequired','sparepartitemrequired','remarks','hp','head','kw','pumpno','pumptype','rpm','motorno','comment','client_comment','client_image']
        
        #service
        
class Product5FirePumpService(serializers.ModelSerializer):
    class Meta:
        model = FirePumpService
        fields = ['details_lable','service_location','qty_required','service_remarks']
        
class Product6hisScaneSerializer(serializers.ModelSerializer):
    #image = Base64ImageField()
    class Meta:
        model = FireDetectionHistory
        fields = "__all__"
        #fields = ['smpid','clientid','empid','image','location','sparepartrequired','sparepartitemrequired','remarks','specs_of_panel','type_of_system','make','loops_zone','repeater_panel','isolator_module','heat_detector','flame_detector','smoke_detector','multi_detector','gas_detector','beam_detector','manual_call_point','hooter_cum_sounder','zone_monitor_module','monitor_module','control_module','power_supply_unit','zener_barrier','siren','cables','special_detector','battery_backup','comment','client_comment','client_image']
        
        #service 
        
class Product6FireDetectionService(serializers.ModelSerializer):
    class Meta:
        model = FireDetectionService
        fields = ['details_lable','service_location','qty_required','service_remarks']

class Product7hisScaneSerializer(serializers.ModelSerializer):
    #image = Base64ImageField()
    class Meta:
        model = PortableMonitorHistory
        fields = "__all__"
        #fields = ['smpid','clientid','empid','image','location','sparepartrequired','sparepartitemrequired','remarks','type_of_monitor','moc_body','rotation','capacity','flow','pressure','size','throw_range','foam_tank','foam_inductor','handle_rotation_wheel','foam_inductor_pipe','nozzle_type','operation_manual_electric','comment','client_comment','client_image']
        
class Product8hisScaneSerializer(serializers.ModelSerializer):
    #image = Base64ImageField()
    class Meta:
        model = SuppresionSystemHistory
        fields = "__all__"
        #fields = ['smpid','clientid','empid','image','location','sparepartrequired','sparepartitemrequired','remarks','specs_of_supression_system','specs_of_panel_and_make','type_of_system','make','loops_zone','model_no_suppresion','capacity_of_clyinder','no_of_cylinders','empty_weight','full_weight','suppression_gas_filled','pressure_gauage_reading','electromagnetic_actuator','pneumatic_actuator','pressure_supervisory_switch','flexible_discharge_hose','flexible_actuator_hose','nozzles_suppresion','abort_switch','heat_detector','manifold','piping','flame_detector','smoke_detector','multi_detector','gas_detector','vesda_detector_panel','manual_call_point','hooter_cum_sounder','zone_monitor_module','monitor_module','control_module','power_supply_unit','manual_gas_release_switch','siren','cables','special_detector','battery_backup','comment','client_comment','client_image']
        
        #service 
        
class Product8SuppresionSystemService(serializers.ModelSerializer):
    class Meta:
        model = SuppresionSystemService
        fields = ['details_lable','service_location','qty_required','service_remarks']
        
class Product9hisScaneSerializer(serializers.ModelSerializer):
    #image = Base64ImageField()
    class Meta:
        model = ControlValveHistory
        fields = "__all__"
        #fields = ['smpid','clientid','empid','image','location','sparepartrequired','sparepartitemrequired','remarks','type_of_valve','moc','size','spindle','wheel_lever','gasket','gland_packing','drain_valve','pressure_guage','pressure','flow','test_valve','soleniod_valve_actuator','internal_disc_flap','gong_bell','comment','client_comment','client_image']
        
    # password Reset
        
class UserResetPasswordSerializer(serializers.Serializer):
    email = serializers.EmailField(max_length=255)
    class Meta:
        fields = ['email']
        
    def validate(self, attrs):
        email = attrs.get('email')
        upass = '1234'
        if User.objects.filter(email=email).exists():
            user = User.objects.get(email=email)
            user.set_password(upass)
            user.save()
            body = 'Your Password Is '+ upass
            data = { 'subject':'your password','body':body,'to_email':user.email }
            Util.send_mail(data)
            return attrs
        else:
            raise ValidationError('You are not a Registered User')


class SiteModelProductSerializer(serializers.ModelSerializer):
    company_name = serializers.ReadOnlyField(source='clientid.company')
    class Meta:
        model = SiteModelProduct
        fields = ['clientid','company_name','location','unit']

            
class Offlinemodelno(serializers.ModelSerializer):
    portablemproducthis_smpid = Product1hisScaneSerializer(many=True, read_only=True)
    firehydranthis_smpid = Product2hisScaneSerializer(many=True, read_only=True)
    class Meta:
        model = SiteModelProduct
        fields = ['pid','location','clientid','empid','modelno','portablemproducthis_smpid','firehydranthis_smpid']
        

        
        
        
        
        
        