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 @task_template_id := (SELECT `id`
                          FROM ohrm_advanced_task_template
                          WHERE `name` = 'Personal Details');

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

SET @metadata := CONCAT('{
  "entityProcessId": ', @entity_process_id, ',
  "taskTemplateId": ', @task_template_id, ',
  "formVersionId": ', @form_version_id, ',
  "dataTransfer": [
    {
      "processorClass": "PersonalInfoFormToCandidateDataTransferProcessor",
      "read": {
        "endpointClass": "OrangeHRM\\\\Api\\\\Recruitment\\\\CandidateEndpoint",
        "params": {
          "request": {
            "candidateId": "${candidateId}"
          }
        }
      },
      "write": {
        "endpointClass": "OrangeHRM\\\\Api\\\\Recruitment\\\\CandidateEndpoint",
        "method": "PATCH",
        "params": {
          "request": {
            "candidateId": "${candidateId}"
          },
          "body": {
            "firstName": "${first_name}",
            "middleName": "${middle_name}",
            "lastName": "${last_name}",
            "email": "${email}",
            "contactNo": "${contactNo}",
            "keywords": "${keywords}",
            "vacancyId": "${vacancyId}",
            "level": "${level}"
          }
        }
      }
    }
  ]
}');

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

SET @task_id := (SELECT `id`
                 FROM `ohrm_advanced_task`
                 WHERE `name` = 'Copy "Personal Information" form data to Candidate'
                   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 candidate 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';
