public function hydrate($array, $structure = 'flat')
 {
     $submission = new SubmissionEntity();
     $data = array('lead' => array(), 'form' => array(), 'detail' => array());
     $leadHydrator = new LeadHydrator();
     $formHydrator = new FormHydrator();
     $detailHydrator = new DetailHydrator();
     if ($structure == 'flat') {
         $i = 0;
         foreach ($array as $field => $value) {
             switch ($field) {
                 case "company":
                 case "formname":
                 case "ipaddress":
                 case "referrer":
                 case "timecreated":
                     $data['lead'][$field] = $value;
                     break;
                 case "FirstName":
                 case "LastName":
                 case "City":
                 case "State":
                 case "Email":
                 case "Phone":
                 case "Question1":
                 case "Answer1":
                 case "Question2":
                 case "Answer2":
                 case "Question3":
                 case "Answer3":
                     $data['detail'][$i]['attributename'] = $field;
                     $data['detail'][$i]['value'] = $value;
                     break;
             }
             $i++;
         }
     } else {
         $_detail = $array['detail'];
         $array['detail'] = [];
         $i = 0;
         foreach ($_detail as $field => $value) {
             $array['detail'][$i]['attributename'] = $field;
             $array['detail'][$i]['value'] = $value;
             $i++;
         }
         $data = $array;
     }
     $lead = $leadHydrator->hydrate($data['lead'], new LeadEntity());
     $form = $data['form'] ? $formHydrator->hydrate($data['form'], new FormEntity()) : new FormEntity();
     $detail = $detailHydrator->hydrate($data['detail'], new DetailEntity());
     $submission->setLead($lead);
     $submission->setForm($form);
     $submission->setDetail($detail);
     return $submission;
 }