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` = 'Contact Details'
                             and workflow_id = 'PREBOARDING_CONTACT_DETAILS_PROCESS');

SET @task_template_id := (SELECT `id`
    FROM ohrm_advanced_task_template WHERE
    `name` = 'Contact Details' AND workflow = 'PREBOARDING_CONTACT_DETAILS_TASK');


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

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


SET @metadata := CONCAT('{
  "entityProcessId": ', @entity_process_id, ',
  "taskTemplateId": ', @task_template_id, ',
  "formVersionId": ', @form_version_id, ',
  "dataTransfer": [
    {
      "processorClass": "PreboardingInfoToPimDataTransferProcessor",
      "get": {
        "endpointClass": "OrangeHRM\\\\Api\\\\Pim\\\\EmployeeEndpoint",
        "endpointVersion": 2,
        "params": {
          "request": {
            "emp_number": "${empNumber}"
          }
        }
      },
      "patch": {
        "endpointClass": "OrangeHRM\\\\Api\\\\Pim\\\\EmployeeEndpoint",
        "endpointVersion": 2,
        "emptyValueMap": {
            "country": "",
            "street1": "",
            "street2": "",
            "city": "",
            "province": ""
        },
        "params": {
          "request": {
            "emp_number": "${empNumber}"
          },
          "body": {
            "street1": "${address_street_1}",
            "street2": "${address_street_2}",
            "city": "${city}",
            "country": "${country#id}",
            "province": "${state}",
            "emp_zipcode": "${zip}",
            "emp_hm_telephone": "${home_telephone}",
            "emp_mobile": "${mobile}",
            "emp_oth_email": "${other_email}"
          }
        }
      }
    }
  ]
}');

SET @task_id := (SELECT `id`
                 FROM `ohrm_advanced_task`
                 WHERE `name` = 'Copy Preboarding Contact Details 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 "Contact Details" 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_CONTACT_DETAILS_TASK'
  AND `state` = 'Submitted'
  AND `action` = 'Approve'
  AND `resulting_state` = 'Approved';
