from fmls_api.models import Data, SchoolRating
import json, datetime

class SetWordpressData:
    #class variable
    wordpressData = {'post':'', 'postMeta':''}
    fmlsData = {}
    postTerms = ['property_area', 'property_city', 'property_county', 'property_feature', 'property_label', 'property_state', 'property_status', 'property_type']
    postMetaKey = {'fave_city':'property_city', 'fave_subdivision':'property_subdivision', 'fave_property_garage':'property_garage', 'fave_property_sec_price':'calculate_propert_price', 'property_extra_data':'property_extra_data', 'fave_property_bathrooms':'property_bathrooms', 'fave_property_bedrooms':'property_bedrooms', 'fave_property_zip':'property_zip','fave_property_address':'property_address', 'fave_property_map_address':'__getTitle__', 'fave_property_year':'property_year', 'fave_property_size':'property_size', 'fave_property_country':'property_country', 'houzez_geolocation_lat':'geo_lat', 'houzez_geolocation_long':'geo_long', 'fave_property_location':'property_location', 'fave_property_price':'property_price', 'fave_property_id':'property_id'}

    # The init method or constructor
    def __init__(self, fmls_id):
        # Instance Variable
        self.fmls = self.getFmlsDataobject(fmls_id)

    def getFmlsDataobject(self, fmls_id):
        try:
            return Data.objects.get(id=fmls_id)
        except Data.DoesNotExist:
            return False

    def setData(self):
        if self.fmls:
            self.fmlsData = eval(self.fmls.json_value)
            self.wordpressData['post'] = self.postTabledata()
            self.wordpressData['postMeta'] = self.postMetaTableData()
            self.wordpressData['postTerms'] = self.postMetaTermsData()
            self.wordpressData['media'] = self.postMediaData()
        return self.wordpressData

    def postMediaData(self):
        media = []
        if(self.fmlsData['Media']):
            for mediaUrl in self.fmlsData['Media']:
                media.append(mediaUrl['MediaURL'])
        return media

    def postTabledata(self):
        postData = {'title':self.__getTitle__(), 'content':self.__getContent__(), 'post_status':'publish', 'post_type':'property', 'fmls_api_data':self.fmls.id}
        return postData

    def postMetaTableData(self):
        postMetaData = {}
        for the_key, the_value in self.postMetaKey.items():
            postMetaData[the_key] = getattr(self, the_value)()

        postMetaData = {**postMetaData, **self.postMetaStaticContent(), **self.postMetaSchoolContent()}
        return postMetaData

    #get the title value from data
    def __getTitle__(self):
        title = ""
        if(self.fmlsData['UnparsedAddress']):
            title = title + self.fmlsData['UnparsedAddress']
        else:
            title = 'UnparsedAddress'
        return title

    def property_country(self):
        property_country = ""
        if(self.fmlsData['CountyOrParish']):
            property_country = self.fmlsData['CountyOrParish']
        else:
            property_country = "CountyOrParish"
        return property_country

    def geo_lat(self):
        geo_lat = ""
        if(self.fmlsData['Latitude']):
            geo_lat = self.fmlsData['Latitude']
        return geo_lat

    def geo_long(self):
        geo_long = ""
        if(self.fmlsData['Longitude']):
            geo_long = self.fmlsData['Longitude']
        return geo_long    

    def property_location(self):
        property_location = ""
        property_location = str(self.geo_lat())+','+str(self.geo_long())+','+str(14)
        return property_location

    def __getContent__(self):
        content = ""
        if(self.fmlsData['PublicRemarks']):
            content = self.fmlsData['PublicRemarks']
        else:
            content = 'PublicRemarks'
        return content

    def postMetaStaticContent(self):
        staticData = {'fave_property_size_prefix':'Sq Ft', 'fave_property_map_street_view':'show', 'fave_property_map':'1', 'fave_property_price_postfix':'Sq Ft'}
        return staticData

    def property_id(self):
        property_id = 'N/A'
        if(self.fmlsData['ListingId']):
            property_id = self.fmlsData['ListingId']
        
        return property_id

    def calculate_propert_price(self):
        propert_price = '0'
        if(self.fmlsData['ListPrice'] and self.fmlsData['BuildingAreaTotal']):
            propert_price = float(self.fmlsData['ListPrice'])/float(self.fmlsData['BuildingAreaTotal'])

        return propert_price    

    def property_price(self):
        property_price = '0'
        if(self.fmlsData['FMLS_CurrentPrice']):
            property_price = self.fmlsData['FMLS_CurrentPrice']
        else:
            property_price = "FMLS_CurrentPrice"
        return property_price

    def property_size(self):
        """
        property_size = '0'
        if(self.fmlsData['AboveGradeFinishedArea']):
            property_size = int(property_size) + int(self.fmlsData['AboveGradeFinishedArea'])

        if(self.fmlsData['BelowGradeFinishedArea']):
            property_size = int(property_size) + int(self.fmlsData['BelowGradeFinishedArea'])
        return property_size    
        """
        return str(self.fmlsData['BuildingAreaTotal'])

    def property_year(self):
        property_year = '0'
        if(self.fmlsData['YearBuilt']):
            property_year = self.fmlsData['YearBuilt']
        else:
            property_year = "YearBuilt"

        return property_year   
    
    def property_garage(self):
        property_garage = 'N/A'
        if "GarageSpaces" in self.fmlsData and self.fmlsData['GarageSpaces']:
            property_garage = self.fmlsData['GarageSpaces']
        
        return property_garage    

    def property_zip(self):
        property_zip = ""
        if(self.fmlsData['PostalCode']):
            property_zip = self.fmlsData['PostalCode']
        else:
            property_zip = "PostalCode"    
        return property_zip

    def property_bedrooms(self):
        property_bedrooms = '0'
        if(self.fmlsData['BedroomsTotal']):
            property_bedrooms = self.fmlsData['BedroomsTotal']
        return property_bedrooms

    def property_bathrooms(self):
        property_bathrooms = ""
        """
        if (self.fmlsData['FMLS_UpperLevelFullBathrooms']):
            property_bathrooms = property_bathrooms + self.fmlsData['FMLS_UpperLevelFullBathrooms']
        if (self.fmlsData['MainLevelBathrooms']):
            property_bathrooms = property_bathrooms + self.fmlsData['MainLevelBathrooms']
        if (self.fmlsData['FMLS_LowerLevelFullBathrooms']):
            property_bathrooms = property_bathrooms + self.fmlsData['FMLS_LowerLevelFullBathrooms']
        if (self.fmlsData['BathroomsFull']):
            property_bathrooms = property_bathrooms + self.fmlsData['BathroomsFull']
        if (self.fmlsData['FMLS_UpperLevelHalfBathrooms']):
            property_bathrooms = property_bathrooms + self.fmlsData['FMLS_UpperLevelHalfBathrooms']
        if (self.fmlsData['FMLS_MainLevelHalfBathrooms']):
            property_bathrooms = property_bathrooms + self.fmlsData['FMLS_MainLevelHalfBathrooms']
        if (self.fmlsData['FMLS_LowerLevelHalfBathrooms']):
            property_bathrooms = property_bathrooms + self.fmlsData['FMLS_LowerLevelHalfBathrooms']
        if (self.fmlsData['BathroomsHalf']):
            property_bathrooms = property_bathrooms + self.fmlsData['BathroomsHalf']
        """
        if (self.fmlsData['BathroomsFull']):
            property_bathrooms = str(self.fmlsData['BathroomsFull'])
        else:
            property_bathrooms = '0'

        if (self.fmlsData['BathroomsHalf']):
            property_bathrooms = property_bathrooms+ ' | '+str(self.fmlsData['BathroomsHalf'])
        else:
            property_bathrooms = property_bathrooms+' | 0'    

        return str(property_bathrooms)

    def property_address(self):
        property_address = self.__getTitle__()
        return property_address

    def property_extra_data(self):
        extra_data = {'direction':'','first':{}, 'second':{}}
        extra_data['second']['address_info'] = self.property_address_info()
        extra_data['second']['schools'] = self.property_schools()
        extra_data['second']['interior_features'] = self.interior_features()
        extra_data['second']['exterior_features'] = self.exterior_features()
        extra_data['second']['additional_information'] = self.additional_information()
        extra_data['second']['listing_details'] = self.listing_details()
        if(self.fmlsData['StandardStatus']=='Closed'): 
            extra_data['second']['sold_details'] = self.sold_details()
        return json.dumps(extra_data, indent = 4)

    def property_subdivision(self):
        property_subdivision = 'SubdivisionName'
        if(self.fmlsData['SubdivisionName']):
            property_subdivision = self.fmlsData['SubdivisionName']

        return property_subdivision

    def property_city(self):
        property_city = 'City'
        if(self.fmlsData['City']):
            property_city = self.fmlsData['City']

        return property_city    
        
    def property_address_info(self):
        address_info = {}
        getAddress = None
        if (self.fmlsData['StreetNumber']):
            getAddress = str(self.fmlsData['StreetNumber'])+" "

        if (self.fmlsData['StreetDirPrefix']):
            getAddress = getAddress + str(self.fmlsData['StreetDirPrefix'])+" "

        if (self.fmlsData['StreetName']):
            getAddress = getAddress + str(self.fmlsData['StreetName'])+" "

        if (self.fmlsData['StreetSuffix']):
            getAddress = getAddress + str(self.fmlsData['StreetSuffix'])+" "

        if (self.fmlsData['StreetDirSuffix']):
            getAddress = getAddress + str(self.fmlsData['StreetDirSuffix'])+" "

        address_info['address'] = getAddress
        address_info['city'] = self.fmlsData['City']
        address_info['state/County'] = self.fmlsData['CountyOrParish']
        address_info['zip/Postal_code'] = self.property_zip()

        # address_info['latitude'] = (self.fmlsData['Latitude']) if self.fmlsData['Latitude'] else 'Latitude'
        # address_info['longitude'] = (self.fmlsData['Longitude']) if self.fmlsData['Longitude'] else 'Longitude'
        address_info['subdivision'] = self.property_subdivision()
        address_info['direction'] = (self.fmlsData['Directions']) if self.fmlsData['Directions'] else 'N/A'
        return address_info

    def interior_features(self):
        interior_features = {}
        interior_features['room_type'] = ', '.join(self.fmlsData['RoomType']) if "RoomType" in self.fmlsData and self.fmlsData['RoomType'] else 'N/A'
        interior_features['rooms'] = ', '.join(self.fmlsData['RoomBedroomFeatures']) if "RoomBedroomFeatures" in self.fmlsData and self.fmlsData['RoomBedroomFeatures'] else 'N/A'
        interior_features['primary_on_main'] = 'Yes' if "RoomBedroomFeatures" in self.fmlsData and ('Master on Main' in self.fmlsData['RoomBedroomFeatures']) else 'No'
    
        interior_features['kitchen'] = ', '.join(self.fmlsData['RoomKitchenFeatures']) if "RoomKitchenFeatures" in self.fmlsData and self.fmlsData['RoomKitchenFeatures'] else 'N/A'
        interior_features['dining'] = ', '.join(self.fmlsData['RoomDiningRoomFeatures']) if "RoomDiningRoomFeatures" in self.fmlsData and self.fmlsData['RoomDiningRoomFeatures'] else 'N/A'
        interior_features['cooling_source'] = ', '.join(self.fmlsData['Cooling']) if "Cooling" in self.fmlsData and self.fmlsData['Cooling'] else 'N/A'
        interior_features['heating_source'] = ', '.join(self.fmlsData['Heating']) if "Heating" in self.fmlsData and self.fmlsData['Heating'] else 'N/A'
        interior_features['energy_related'] = ', '.join(self.fmlsData['GreenEnergyEfficient']) if "GreenEnergyEfficient" in self.fmlsData and self.fmlsData['GreenEnergyEfficient'] else 'N/A'
        interior_features['appliances'] = ', '.join(self.fmlsData['Appliances']) if "Appliances" in self.fmlsData and self.fmlsData['Appliances'] else 'N/A'
        
        if ("BuildingAreaTotal" in self.fmlsData and self.fmlsData['BuildingAreaTotal']) and ("BuildingAreaSource" in self.fmlsData and self.fmlsData['BuildingAreaSource']): 
            interior_features['sq_feet/Source'] = str(self.fmlsData['BuildingAreaTotal'])+'/'+str(self.fmlsData['BuildingAreaSource'])

        interior_features['interior'] = ', '.join(self.fmlsData['InteriorFeatures']) if "InteriorFeatures" in self.fmlsData and self.fmlsData['InteriorFeatures'] else 'N/A'
        interior_features['master_bath'] = ', '.join(self.fmlsData['RoomMasterBathroomFeatures']) if "RoomMasterBathroomFeatures" in self.fmlsData and self.fmlsData['RoomMasterBathroomFeatures'] else 'N/A'
        interior_features['laundry_features'] = ', '.join(self.fmlsData['LaundryFeatures']) if "LaundryFeatures" in self.fmlsData and self.fmlsData['LaundryFeatures'] else 'N/A'
        interior_features['fireplace_total'] = self.fmlsData['FireplacesTotal'] if "FireplacesTotal" in self.fmlsData and self.fmlsData['FireplacesTotal'] else 'N/A'
        interior_features['fireplace_features'] = ', '.join(self.fmlsData['FireplaceFeatures']) if "FireplaceFeatures" in self.fmlsData and self.fmlsData['FireplaceFeatures'] else 'N/A'
        interior_features['accessibility'] = ', '.join(self.fmlsData['AccessibilityFeatures']) if "AccessibilityFeatures" in self.fmlsData and self.fmlsData['AccessibilityFeatures'] else 'N/A'
        interior_features['electric'] = ', '.join(self.fmlsData['Electric']) if "Electric" in self.fmlsData and self.fmlsData['Electric'] else 'N/A'
        interior_features['basement'] = ', '.join(self.fmlsData['Basement']) if "Basement" in self.fmlsData and self.fmlsData['Basement'] else 'N/A'
        interior_features['window_features'] = ', '.join(self.fmlsData['WindowFeatures']) if "WindowFeatures" in self.fmlsData and self.fmlsData['WindowFeatures'] else 'N/A'
        interior_features['other_equipment'] = ', '.join(self.fmlsData['OtherEquipment']) if "OtherEquipment" in self.fmlsData and self.fmlsData['OtherEquipment'] else 'N/A'
        interior_features['flooring'] = ', '.join(self.fmlsData['Flooring']) if "Flooring" in self.fmlsData and self.fmlsData['Flooring'] else 'N/A'
        return interior_features

    def exterior_features(self):
        exterior_features = {}
        exterior_features['architectural_style'] = ', '.join(self.fmlsData['ArchitecturalStyle']) if "ArchitecturalStyle" in self.fmlsData and self.fmlsData['ArchitecturalStyle'] else 'N/A'
        exterior_features['is_new_construction'] = 'Yes' if "PropertyCondition" in self.fmlsData and ('New Construction' in self.fmlsData['PropertyCondition']) else 'No'
        exterior_features['construction_status'] = ', '.join(self.fmlsData['PropertyCondition']) if self.fmlsData['PropertyCondition'] else 'N/A'
        exterior_features['exterior'] = ', '.join(self.fmlsData['ExteriorFeatures']) if "ExteriorFeatures" in self.fmlsData and self.fmlsData['ExteriorFeatures'] else 'N/A'
        exterior_features['water_sewer'] = ', '.join(self.fmlsData['Sewer']) if "Sewer" in self.fmlsData and self.fmlsData['Sewer'] else 'N/A'
        exterior_features['utilities'] = ', '.join(self.fmlsData['Utilities']) if "Utilities" in self.fmlsData and self.fmlsData['Utilities'] else 'N/A'
        exterior_features['levels'] = ', '.join(self.fmlsData['Levels']) if "Levels" in self.fmlsData and self.fmlsData['Levels'] else 'N/A'
        exterior_features['construction'] = ', '.join(self.fmlsData['ConstructionMaterials']) if "ConstructionMaterials" in self.fmlsData and self.fmlsData['ConstructionMaterials'] else 'N/A'
        exterior_features['water_body_name'] = self.fmlsData['WaterBodyName'] if "WaterBodyName" in self.fmlsData and self.fmlsData['WaterBodyName'] else 'N/A'
        exterior_features['water_front_features'] = ', '.join(self.fmlsData['WaterfrontFeatures']) if "WaterfrontFeatures" in self.fmlsData and self.fmlsData['WaterfrontFeatures'] else 'N/A'
        exterior_features['fencing'] = ', '.join(self.fmlsData['Fencing']) if "Fencing" in self.fmlsData and self.fmlsData['Fencing'] else 'N/A'
        exterior_features['spa_features'] = ', '.join(self.fmlsData['SpaFeatures']) if "SpaFeatures" in self.fmlsData and self.fmlsData['SpaFeatures'] else 'N/A'
        
        exterior_features['parking_total'] = self.fmlsData['ParkingTotal'] if "ParkingTotal" in self.fmlsData and self.fmlsData['ParkingTotal'] else 'N/A'
        exterior_features['parking_features'] = ', '.join(self.fmlsData['ParkingFeatures']) if "ParkingFeatures" in self.fmlsData and self.fmlsData['ParkingFeatures'] else 'N/A'
        exterior_features['roof'] = ', '.join(self.fmlsData['Roof']) if "Roof" in self.fmlsData and self.fmlsData['Roof'] else 'N/A'
        exterior_features['water_source'] = ', '.join(self.fmlsData['WaterSource']) if "WaterSource" in self.fmlsData and self.fmlsData['WaterSource'] else 'N/A'
        exterior_features['security_features'] = ', '.join(self.fmlsData['SecurityFeatures']) if "SecurityFeatures" in self.fmlsData and self.fmlsData['SecurityFeatures'] else 'N/A'
        exterior_features['private_pool'] = 'Yes' if (("PoolPrivateYN" in self.fmlsData) and (not self.fmlsData['PoolPrivateYN']) and (self.fmlsData['PoolPrivateYN']=='None')) else 'No'
        exterior_features['pool'] = ', '.join(self.fmlsData['PoolFeatures']) if "PoolFeatures" in self.fmlsData and self.fmlsData['PoolFeatures'] else 'N/A'
        exterior_features['lot_size_acres'] = str(self.fmlsData['LotSizeAcres'])+'/'+str(self.fmlsData['LotSizeSource']) if "LotSizeAcres" in self.fmlsData and self.fmlsData['LotSizeAcres'] else 'N/A'
        exterior_features['lot_features'] = ', '.join(self.fmlsData['LotFeatures']) if "LotFeatures" in self.fmlsData and self.fmlsData['LotFeatures'] else 'N/A'
        exterior_features['patio_and_porch'] = ', '.join(self.fmlsData['PatioAndPorchFeatures']) if "PatioAndPorchFeatures" in self.fmlsData and self.fmlsData['PatioAndPorchFeatures'] else 'N/A'
        exterior_features['view'] = ', '.join(self.fmlsData['View']) if "View" in self.fmlsData and self.fmlsData['View'] else 'N/A'
        return exterior_features

    def postMetaSchoolContent(self):
        schoolData = {}
        getElementaryData = self.get_property_school_data('Elementary')
        getMiddleData = self.get_property_school_data('Middle')
        getHighData = self.get_property_school_data('High')
        
        schoolData['fave_ele_schoolname'] = getElementaryData['name']
        schoolData['fave_ele_schoolrating'] = getElementaryData['rating']
        schoolData['fave_ele_schooltype'] = 'Elementary'

        schoolData['fave_mid_schoolname'] = getMiddleData['name']
        schoolData['fave_mid_schoolrating'] = getMiddleData['rating']
        schoolData['fave_mid_schooltype'] = 'Middle'

        schoolData['fave_hig_schoolname'] = getHighData['name']
        schoolData['fave_hig_schoolrating'] = getHighData['rating']
        schoolData['fave_hig_schooltype'] = 'High'
        
        return schoolData

    def property_schools(self):
        schools = {}
        getElementaryData = self.get_property_school_data('Elementary')
        getMiddleData = self.get_property_school_data('Middle')
        getHighData = self.get_property_school_data('High')

        schools['elementary_school'] = getElementaryData['name']
        schools['elementary_school_rating'] = getElementaryData['rating']
        schools['middle_school'] = getMiddleData['name']
        schools['middle_school_rating'] = getMiddleData['rating']
        schools['high_school'] = getHighData['name']
        schools['high_school_rating'] = getHighData['rating']
        return schools

    def get_property_school_data(self, schoolType):
        school_data = {}
        school_data['type'] = schoolType
        school_data['city'] = self.fmlsData['City']
        if(schoolType=='Elementary'):
            school_data['name'] = (self.fmlsData['ElementarySchool']) if self.fmlsData['ElementarySchool'] else 'ElementarySchool'
        elif(schoolType=='Middle'):
            school_data['name'] = (self.fmlsData['MiddleOrJuniorSchool']) if self.fmlsData['MiddleOrJuniorSchool'] else 'MiddleOrJuniorSchool'
        elif(schoolType=='High'):
            school_data['name'] = (self.fmlsData['HighSchool']) if self.fmlsData['HighSchool'] else 'HighSchool'

        get_school_rating = self.get_school_rating(school_data['city'], school_data['type'], school_data['name'])
        if(get_school_rating):
            school_data['rating'] = get_school_rating.school_rating
        else:
            school_data['rating'] = 'N/A'  
        return school_data 

    def get_school_rating(self, city, type, school_name):
        try:
            return SchoolRating.objects.get(city_name=city, school_type=type, school_fmls_name=school_name)
        except SchoolRating.DoesNotExist:
            return False

    def additional_information(self):
        additional_information = {}
        additional_information['status_detail'] = (self.fmlsData['StandardStatus']) if self.fmlsData['StandardStatus'] else 'N/A'
        additional_information['year_built'] = (self.fmlsData['YearBuilt']) if self.fmlsData['YearBuilt'] else 'N/A'
        additional_information['construction_status'] = ', '.join(self.fmlsData['PropertyCondition']) if self.fmlsData['PropertyCondition'] else 'N/A'
        additional_information['property_type'] = (self.fmlsData['PropertyType']) if self.fmlsData['PropertyType'] else 'N/A'
        additional_information['type'] = (self.fmlsData['FMLS_MlsPropertyType']) if self.fmlsData['FMLS_MlsPropertyType'] else 'N/A'
        additional_information['property_sub_type'] = (self.fmlsData['PropertySubType']) if self.fmlsData['PropertySubType'] else 'N/A'
        if self.fmlsData['BuilderName']:
            additional_information['builder_name'] = self.fmlsData['BuilderName']

        additional_information['rental_restrictions'] = 'Yes' if (("FMLS_AssociationRentRestrictionsYN" in self.fmlsData) and (not self.fmlsData['FMLS_AssociationRentRestrictionsYN']) and (self.fmlsData['FMLS_AssociationRentRestrictionsYN']=='None')) else 'No'
        additional_information['association'] = 'Yes' if (("association" in self.fmlsData) and (not self.fmlsData['association']) and (self.fmlsData['association']=='None')) else 'No'
        additional_information['association_fee'] = str('${:,.0f}'.format(self.fmlsData['AssociationFee']))+'/'+str(self.fmlsData['AssociationFeeFrequency']) if self.fmlsData['AssociationFee'] else 'N/A'
        if "AssociationAmenities" in self.fmlsData and self.fmlsData['AssociationAmenities']:
            additional_information['amenities'] = ', '.join(self.fmlsData['AssociationAmenities']) if "AssociationAmenities" in self.fmlsData and self.fmlsData['AssociationAmenities'] else 'N/A'
        
        additional_information['tax_year'] = (self.fmlsData['TaxYear']) if self.fmlsData['TaxYear'] else 'N/A'
        additional_information['tax_amount'] = str('${:,.0f}'.format(self.fmlsData['TaxAnnualAmount'])) if self.fmlsData['TaxAnnualAmount'] else 'N/A'

        if "CommunityFeatures" in self.fmlsData and self.fmlsData['CommunityFeatures'] and ('None' not in self.fmlsData['CommunityFeatures']):
            additional_information['community_features'] = ', '.join(self.fmlsData['CommunityFeatures']) if "CommunityFeatures" in self.fmlsData and self.fmlsData['CommunityFeatures'] else 'N/A'
                
        return additional_information

    def listing_details(self):
        additional_details = {}
        additional_details['current_price'] = str('${:,.0f}'.format(self.fmlsData['FMLS_CurrentPrice'])) if self.fmlsData['FMLS_CurrentPrice'] else 'N/A' 
        additional_details['original_price'] = str('${:,.0f}'.format(self.fmlsData['OriginalListPrice'])) if self.fmlsData['OriginalListPrice'] else 'N/A'
        additional_details['price_change'] = self.priceDiff()

        additional_details['listing_provided_courtesy_of'] = (self.fmlsData['ListOfficeName']) if self.fmlsData['ListOfficeName'] else 'N/A' 
        additional_details['change_time'] = (datetime.datetime.strptime(self.fmlsData['StatusChangeTimestamp'],'%Y-%m-%dT%H:%M:%S.%fZ').strftime('%B %d, %Y %I:%M %p %Z')) if self.fmlsData['StatusChangeTimestamp'] else 'N/A'
        additional_details['days_on_market'] = (self.fmlsData['DaysOnMarket']) if self.fmlsData['DaysOnMarket'] else 'N/A'
        return additional_details
    
    def priceDiff(self):
        price = 0
        if(self.fmlsData['FMLS_CurrentPrice'] and self.fmlsData['OriginalListPrice']):
            price = self.fmlsData['FMLS_CurrentPrice'] - self.fmlsData['OriginalListPrice']

        if price > 0:
            price = ('+${:,.0f}'.format(price))
        elif price == 0:
            price = ('${:,.0f}'.format(price))
        else:
            price = ('-${:,.0f}'.format(abs(price)))
        return price

    def sold_details(self):
        sold_details = {}
        sold_details['sold_price'] = (self.fmlsData['ClosePrice']) if self.fmlsData['ClosePrice'] else 'ClosePrice'
        sold_details['closed_date'] = (self.fmlsData['CloseDate']) if self.fmlsData['CloseDate'] else 'CloseDate'
        return sold_details
    
    def postMetaTermsData(self):
        postMetaTerms = {'property_type':[], 'property_city':[], 'property_state':[], 'property_label':''}
        if self.fmlsData['PropertyType']:
            postMetaTerms['property_type'].append(self.fmlsData['PropertyType'])
        if self.fmlsData['City']:
            postMetaTerms['property_city'].append(self.fmlsData['City'])
        if self.fmlsData['CountyOrParish']:
            postMetaTerms['property_state'].append(self.fmlsData['CountyOrParish'])

        postMetaTerms['property_label'] = self.propertyReports()
        postMetaTerms = {k: v for k, v in postMetaTerms.items() if v}       #remove empty fields
        return postMetaTerms

    def propertyReports(self):
        propertyLabel = []
       
        # propertyLabel.append('Recently Sold Properties')      

        if "SecurityFeatures" in self.fmlsData and ('Security Gate' in self.fmlsData['SecurityFeatures'] or 'Security Service' in self.fmlsData['SecurityFeatures']):
            propertyLabel.append('Gated Communities')

        if "ListPrice" in self.fmlsData and self.fmlsData['ListPrice'] and (self.fmlsData['ListPrice']>749999):
            propertyLabel.append('Luxury Homes')

        if "WaterBodyName" in self.fmlsData and not self.fmlsData['WaterBodyName']:
            propertyLabel.append('Lake / Waterfront')

        if "PropertyCondition" in self.fmlsData and ('To Be Built' in self.fmlsData['PropertyCondition'] or 'New Construction' in self.fmlsData['PropertyCondition']):
            propertyLabel.append('New Builds')

        if "ArchitecturalStyle" in self.fmlsData and ('High Rise (6 or more stories)' in self.fmlsData['ArchitecturalStyle']):
            propertyLabel.append('High Rises')

        if "ArchitecturalStyle" in self.fmlsData and ('Ranch' in self.fmlsData['ArchitecturalStyle']):
            propertyLabel.append('Ranch Houses')

        if "RoomBedroomFeatures" in self.fmlsData and ('Master on Main' in self.fmlsData['RoomBedroomFeatures']):
            propertyLabel.append('Primary on Main')

        if "MainLevelBedrooms" in self.fmlsData and self.fmlsData['MainLevelBedrooms'] and (self.fmlsData['MainLevelBedrooms']>0):
            propertyLabel.append('Bedroom on Main')

        if "DaysOnMarket" in self.fmlsData and self.fmlsData['DaysOnMarket'] and (self.fmlsData['DaysOnMarket']<7):
            propertyLabel.append('New Properties')

        if "DaysOnMarket" in self.fmlsData and self.fmlsData['DaysOnMarket'] and (self.fmlsData['DaysOnMarket']>30):
            propertyLabel.append('Older Properties')

        if "PoolPrivateYN" in self.fmlsData and self.fmlsData['PoolPrivateYN']=='true':
            propertyLabel.append('Pool')

        return propertyLabel
