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

SET @personal_details_task_template_id := (SELECT `id`
    FROM ohrm_advanced_task_template WHERE
    `name` = 'Personal Details' AND workflow = 'PREBOARDING_PERSONAL_DETAILS_TASK');


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

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


SET @metadata := CONCAT('{
  "entityProcessId": ', @entity_process_id, ',
  "taskTemplateId": ', @personal_details_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": {
            "emp_dri_lice_exp_date": null,
            "licenseNo": "",
            "emp_marital_status": null,
            "nation_code": null,
            "emp_gender": null,
            "emp_birthday": null
        },
        "params": {
          "request": {
            "emp_number": "${empNumber}"
          },
          "body": {
            "firstName": "${first_name}",
            "middleName": "${middle_name}",
            "lastName": "${last_name}",
            "emp_birthday": "${date_of_birth}",
            "emp_gender": "${gender#id}",
            "emp_marital_status": "${marital_status#id}",
            "nation_code": "${nationality#id}",
            "licenseNo": "${driver_license_number}",
            "emp_dri_lice_exp_date": "${license_expiry_date}"
          }
        }
      }
    }
  ]
}');

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


