SET @template_id := (SELECT id
                     FROM ohrm_advanced_task_template
                     WHERE name = 'Push form data to a configured API endpoint'
                     LIMIT 1);

SET @entity_process_id := (SELECT `id`
                           FROM `ohrm_advanced_workflow_entity_process`
                           WHERE `name` = 'Emergency Contacts'
                             and workflow_id = 'PREBOARDING_EMERGENCY_CONTACTS_PROCESS');

SET @task_template_id := (SELECT `id`
    FROM ohrm_advanced_task_template WHERE
    `name` = 'Emergency Contacts' AND workflow = 'PREBOARDING_EMERGENCY_CONTACTS_TASK');


SET @form_version_id := (SELECT `id`
                                 FROM ohrm_dynamic_form_version
                                 WHERE name = 'Preboarding Emergency Contacts');

INSERT INTO `ohrm_advanced_task` (task_template_id, name, description, metadata)
VALUES (@template_id, 'Copy Emergency Contacts form data to Employee',
        'Copy Emergency Contacts form data to Employee upon form approval', '{}');


SET @metadata := CONCAT('{
  "entityProcessId": ', @entity_process_id, ',
  "taskTemplateId": ', @task_template_id, ',
  "formVersionId": ', @form_version_id, ',
  "dataTransfer": [
    {
      "processorClass": "PreboardingToPimMultiTabDataTransferProcessor",
      "formDataSortColumn": "name",
      "get": {
        "endpointClass": "OrangeHRM\\\\Api\\\\Pim\\\\EmployeeEmergencyContactsEndpoint",
        "endpointVersion": 1,
        "params": {
          "request": {
            "emp_number": "${empNumber}"
          }
        },
        "aggregate_column": "emergency_contact"
      },
      "post": {
        "endpointClass": "OrangeHRM\\\\Api\\\\Pim\\\\EmployeeEmergencyContactsEndpoint",
        "endpointVersion": 1,
        "params": {
          "request": {
            "emp_number": "${emp_number}"
          },
          "body": {
             "name": "${name}",
             "relationship": "${relationship}",
             "home_phone": "${home_phone}",
             "mobile_phone": "${mobile_phone}",
             "office_phone": "${work_phone}"
          }
        }
      },
      "delete": {
        "endpointClass": "OrangeHRM\\\\Api\\\\Pim\\\\EmployeeEmergencyContactsEndpoint",
        "endpointVersion": 1,
        "uniqueRecordIdentifierInGet": "seqno",
        "params": {
          "request": {
            "emp_number": "${emp_number}"
          }
        }
      }
    }
  ]
}');

SET @task_id := (SELECT `id`
                 FROM `ohrm_advanced_task`
                 WHERE `name` = 'Copy Emergency Contacts form data to Employee'
                   AND `task_template_id` = @template_id);

UPDATE `ohrm_advanced_task`
SET `metadata` = @metadata
WHERE `id` = @task_id;

-- Copy relevant information from "Emergency Contacts" form to the employee profile upon approving the form

INSERT INTO `ohrm_workflow_state_change_resolver` (`state_machine_id`, `resolver`, `options`)
SELECT `id`, 'TaskStateChangeTaskExecutorResolver', JSON_OBJECT('taskId', @task_id)
FROM `ohrm_workflow_state_machine`
WHERE `workflow` = 'PREBOARDING_EMERGENCY_CONTACTS_TASK'
  AND `state` = 'Submitted'
  AND `action` = 'Approve'
  AND `resulting_state` = 'Approved';

