/***********************************************************************************************************
 * Name         : FormResponseWrapper
 * Purpose      : Wrapper Class for the message received by the Form Response REST Service
 **********************************************************************************************************/

public with sharing class FormResponseWrapper {
    public String email_address;
    public String first_name;
    public String last_name;
    public String twitter_username;
    public String genre;
    public String gender;
    public String city;
    public String postal_code;
    public String country_region;
    public String state_province;
    public Date date_of_birth;
    public String birthdate;
    public String age_range;
    public String mobile_phone;
    public String language;
    public String address;
    public String address_2;
    public String music_affinity;
    public String[] custom_field;
    public String[] mailing_list;
    public String[] triggered_sends;

    public String form_id;
    public String triggered_send_definition_key;
    public String macro_segment;
    public String micro_segment;
    public String sourceChannel;
    public String spotify_id;
    public String retargeting_consent;
    public String source;
    public String ae_segment_id;
    public String ae_framework_id;
    public String wyng_property_id;
    public String wyng_campaign_id;

    public List<String> getMailingListsIds() {
        if (mailing_list == null) {
            return null;
        } else {
            List<String> ids = new List<String>();
            for (String mlId : mailing_list) {
                if (String.isNotBlank(mlId)) {
                    ids.add(mlId);
                }
            }
            return ids;
        }
    }

    public Map<String, Object> deserialize() {
        return (Map<String, Object>) JSON.deserializeUntyped(JSON.serialize(this));
    }

    public Boolean hasMailingLists() {
        List<String> ids = getMailingListsIds();
        return ids != null && !ids.isEmpty();
    }
}