INSERT INTO ohrm_data_group (name, description, can_read, can_create, can_update, can_delete)
VALUES ('preboarding_emergency_contacts', 'Preboarding - Stage 07: Emergency Contacts', 1, 0, 1, 0);

SET @data_group_id := (SELECT `id` FROM `ohrm_data_group` WHERE `name` = 'preboarding_emergency_contacts');
SET @admin_user_role_id := (SELECT `id` FROM `ohrm_user_role` WHERE `name` = 'Admin');
SET @supervisor_id := (SELECT id FROM ohrm_user_role where name = 'Supervisor');
SET @hod_user_role := (SELECT id FROM ohrm_user_role WHERE `name` = 'HeadOfDepartment');
SET @hiring_manager_user_role_id := (SELECT `id` FROM `ohrm_user_role` WHERE `name` = 'HiringManager');
SET @pre_boarding_event_manager_user_role_id := (SELECT `id` FROM `ohrm_user_role` WHERE `name` = 'PreboardingEventManager');
SET @admin_user_role_type := (SELECT `id` FROM `ohrm_user_role_type` WHERE `name` = 'Admin');
SET @supervisor_role_type := (SELECT `id` FROM `ohrm_user_role_type` WHERE `name` = 'Supervisor');
SET @preboarding_new_hire_user_role_id = (SELECT `id` FROM `ohrm_user_role` WHERE `name` = 'PreboardingNewHire');
SET @ess_id := (SELECT id FROM ohrm_user_role where name = 'ESS');
SET @ess_role_type := (SELECT `id` FROM `ohrm_user_role_type` WHERE `name` = 'ESS');

INSERT INTO ohrm_user_role_data_group (user_role_id, data_group_id, can_read, can_create, can_update, can_delete, self, restriction_id) VALUES
    (@admin_user_role_id, @data_group_id, 1, 0, 1, 0, 0, NULL),
    (@supervisor_id, @data_group_id, 1, 0, 1, 0, 0, NULL),
    (@hod_user_role, @data_group_id, 1, 0, 1, 0, 0, NULL),
    (@hiring_manager_user_role_id, @data_group_id, 1, 0, 1, 0, 0, NULL),
    (@pre_boarding_event_manager_user_role_id, @data_group_id, 1, 0, 1, 0, 0, NULL),
    (@preboarding_new_hire_user_role_id, @data_group_id, 1, 0, 1, 0, 1, NULL),
    (@ess_id, @data_group_id, 1, 0, 1, 0, 1, NULL);

INSERT INTO ohrm_user_role_type_data_group (user_role_type_id, data_group_id, can_read, can_create, can_update, can_delete) VALUES
    (@admin_user_role_type, @data_group_id, 1, 0, 1, 0),
    (@supervisor_role_type, @data_group_id, 1, 0, 1, 0),
    (@ess_role_type, @data_group_id, 1, 0, 1, 0);

SET @system_user_id := (SELECT `id` FROM `ohrm_user` WHERE `user_name` = 'System');

INSERT INTO ohrm_dynamic_form (`name`, description, `action`, endpoint, meta_data, data_group_id, created_by,
                               updated_by, created_by_name, version)
VALUES ('Preboarding Emergency Contact Record', 'Preboarding Emergency Contact Record', 'POST', 'preboarding-emergency-contact-record', null, @data_group_id,
        @system_user_id, @system_user_id, 'System', 1);
SET @child_dynamic_form_id := (SELECT `id`
                         FROM ohrm_dynamic_form
                         WHERE name = 'Preboarding Emergency Contact Record');

INSERT INTO ohrm_dynamic_form_version (`name`, description, `action`, endpoint, meta_data, data_group_id, created_by,
                                       updated_by, created_by_name, version, dynamic_form_id)
VALUES ('Preboarding Emergency Contact Record', 'Preboarding Emergency Contact Record', 'POST', 'preboarding-emergency-contact-record', null, @data_group_id,
        @system_user_id, @system_user_id, 'System', 1, @child_dynamic_form_id);
SET @child_dynamic_form_version_id := (SELECT `id`
                                 FROM ohrm_dynamic_form_version
                                 WHERE name = 'Preboarding Emergency Contact Record');

SET @child_meta =  CONCAT('
{
   "version":{
      "schema-version":"1.0.0"
   },
   "fields":[
      {
         "uid":"name_007",
         "name":"name",
         "label":"Name",
         "widget": "textbox",
         "attr": {
            "rows": "1",
            "style": "min-height: 45px"
         },
         "validations":[
            "#required",
            "#length:1,50"
         ]
      },
      {
         "uid":"relationship_007",
         "name":"relationship",
         "label":"Relationship",
         "widget":"text",
         "validations":[
            "#required",
            "#length:1,30"
         ]
      },
      {
         "uid":"home_phone_007",
         "name":"home_phone",
         "widget":"text",
         "label":"Home",
         "validations":[
            "#telephone",
            "#length:0,25"
         ]
      },
      {
         "uid":"mobile_phone_007",
         "name":"mobile_phone",
         "widget":"text",
         "label":"Mobile",
         "validations":[
            "#required",
            "#telephone",
            "#length:0,25"
         ]
      },
      {
         "uid":"work_phone_007",
         "name":"work_phone",
         "widget":"text",
         "label":"Work",
         "validations":[
            "#telephone",
            "#length:0,25"
         ]
      }
   ],
   "views":{
      "form":{
         "uid":"form007",
         "action":"POST",
         "endpoint":"forms/1",
         "body":[
            {
               "uid":"form007_grid",
               "tag":"oxd-grid",
               "props":{
                  "cols":2,
                  "style":"margin-left: -10px;margin-right: -10px;"
               },
               "slots":{
                  "default":[
                     {
                        "uid":"form007_grid_item_1",
                        "tag":"oxd-grid-item",
                        "slots":{
                           "default":[
                              {
                                 "field":"name_007"
                              }
                           ]
                        }
                     },
                     {
                        "uid":"form007_grid_item_2",
                        "tag":"oxd-grid-item",
                        "slots":{
                           "default":[
                              {
                                 "field":"relationship_007"
                              }
                           ]
                        }
                     }
                  ]
               }
            },
            {
               "uid":"form007_text",
               "tag":"oxd-text",
               "props":{
                  "style":"font-size: 12px;font-weight: 700;"
               },
               "slots":{
                  "default":[
                     "Telephone"
                  ]
               }
            },
            {
               "uid":"form007_divider",
               "tag":"oxd-divider",
               "props":{
                  "style":"margin-bottom: 1rem;"
               }
            },
            {
               "uid":"form007_grid2",
               "tag":"oxd-grid",
               "props":{
                  "cols":3,
                  "style":"margin-left: -10px;margin-right: -10px;"
               },
               "slots":{
                  "default":[
                     {
                        "uid":"form007_grid2_item_4",
                        "tag":"oxd-grid-item",
                        "slots":{
                           "default":[
                              {
                                 "field":"home_phone_007"
                              }
                           ]
                        }
                     },
                     {
                        "uid":"form007_grid2_item_5",
                        "tag":"oxd-grid-item",
                        "slots":{
                           "default":[
                              {
                                 "field":"mobile_phone_007"
                              }
                           ]
                        }
                     },
                     {
                        "uid":"form007_grid2_item_6",
                        "tag":"oxd-grid-item",
                        "slots":{
                           "default":[
                              {
                                 "field":"work_phone_007"
                              }
                           ]
                        }
                     }
                  ]
               }
            }
         ],
         "model":{
            "name":"",
            "relationship":"",
            "home_phone":"",
            "mobile_phone":"",
            "work_phone":""
         },
         "computed":[

         ],
         "methods":{

         }
      }
   }
}');

UPDATE ohrm_dynamic_form SET meta_data = @child_meta WHERE id = @child_dynamic_form_id;
UPDATE ohrm_dynamic_form_version SET meta_data = @child_meta WHERE id = @child_dynamic_form_version_id;

INSERT INTO ohrm_dynamic_form (`name`, description, `action`, endpoint, meta_data, data_group_id, created_by,
                               updated_by, created_by_name, version)
VALUES ('Preboarding Emergency Contacts', 'Preboarding Emergency Contacts', 'POST',
        'preboarding-emergency-contacts', null, @data_group_id, @system_user_id, @system_user_id, 'System', 1);

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

INSERT INTO ohrm_dynamic_form_version (`name`, description, `action`, endpoint, meta_data, data_group_id, created_by,
                                       updated_by, created_by_name, version, dynamic_form_id)
VALUES ('Preboarding Emergency Contacts', 'Preboarding Emergency Contacts', 'POST', 'preboarding-emergency-contacts',
        null, @data_group_id, @system_user_id, @system_user_id, 'System', 1, @dynamic_form_id);

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

SET @metadata := CONCAT('
{
  "version": {
    "schema-version": "1.0.0"
  },
  "fields": [
    {
      "uid": "emergency_contact_001",
      "name": "emergency_contact",
      "label": "Emergency Contact",
      "widget": "oxd-subform-widget",
      "attr": {
        "min": 1,
        "max": 3,
        "endpoint": "preboarding-emergency-contact-record"
      },
      "validations": [
        "#childForm:',@child_dynamic_form_version_id,',1,3"
      ]
    }
  ],
  "views": {
    "form": {
      "uid": "form0007",
      "action": "POST",
      "endpoint": "forms/7",
      "body": [
        {
          "uid": "form0007_header",
          "tag": "div",
          "props": {
            "style":"display: flex;"
          },
          "slots": {
            "default": [
              {
                "uid": "form0007_title",
                "tag": "oxd-text",
                "props": {
                  "type": "card-title"
                },
                "slots": {
                  "default": [
                    "Emergency Contacts"
                  ]
                }
              },
              {
                "uid":"form0007_status",
                "tag":"oxd-status-chip",
                "props":{
                   "style":"margin-left: 10px;",
                   "status":"##advancedTask.status##"
                }
              }
            ]
          }
        },
        {
          "uid": "form0007_br",
          "tag": "br"
        },
        {
          "uid": "form0007_grid",
          "tag": "oxd-grid",
          "props": {
            "cols": 1,
            "style": "margin-left: -10px;margin-right: -10px;"
          },
          "slots": {
            "default": [
              {
                "uid": "form0007_grid_item_1",
                "tag": "oxd-grid-item",
                "slots": {
                  "default": [
                    {
                      "field": "emergency_contact_001"
                    }
                  ]
                }
              }
            ]
          }
        },
        {
          "uid": "form0007_divider",
          "tag": "oxd-divider",
          "props": {
            "style": "margin-bottom: 1rem;"
          }
        },
        {
          "uid": "form0007_buttons",
          "tag": "div",
          "props": {
            "class": "orangehrm-form-actions"
          },
          "slots": {
              "default": [
                {
                  "uid": "form0007_required_text",
                  "tag": "oxd-required-text"
                },
                {
                  "uid": "form0007_button_save",
                  "tag": "oxd-button",
                  "props": {
                    "type": "button",
                    "label": "Save",
                    "display-type": "secondary",
                    "style": "margin-left: 0.5rem;"
                  },
                  "events": {
                    "onClick": "#onClickSaveButton"
                  }
                },
                {
                  "uid": "form0007_button_submit",
                  "tag": "oxd-button",
                  "props": {
                    "type": "button",
                    "label": "Submit",
                    "style": "margin-left: 0.5rem;"
                  },
                  "events": {
                    "onClick": "#onClickSubmitButton"
                  }
                },
                {
                  "uid": "form0007_button_reject",
                  "tag": "oxd-button",
                  "props": {
                    "type": "button",
                    "label": "Reject",
                    "display-type": "label-feedback-reject",
                    "style": "margin-left: 0.5rem;",
                    "class": "oxd-dialog-close-button"
                  },
                  "events": {
                    "onClick": "#onClickRejectButton"
                  }
                },
                {
                  "uid": "form0007_button_approve",
                  "tag": "oxd-button",
                  "props": {
                    "type": "button",
                    "label": "Approve",
                    "style": "margin-left: 0.5rem;"
                  },
                  "events": {
                    "onClick": "#onClickApproveButton"
                  }
                }
              ]
            }
        }
      ],
      "model": {
        "emergency_contact": [{
          "name": "",
          "relationship": "",
          "home_phone": "",
          "mobile_phone": "",
          "work_phone": ""
        }]
      },
      "computed": {},
      "methods": {
        "onClickSubmitButton": {
          "#validate": {},
          "#confirmation": {
            "title": "Submit Emergency Contact Details",
            "message": "Please ensure the details provided are accurate.",
            "messageAlt": "The details cannot be edited after submission.",
            "confirmText": "Yes, Submit",
            "confirmDisplayType": "label-feedback-success"
          },
          "#save": {
            "action": "Submit"
          },
          "#toast": {
            "error": "Failed to Submit",
            "success": "Successfully Submitted"
          }
        },
        "onClickSaveButton": {
          "#validate": {},
          "#save": {
             "action": "Save"
          },
          "#toast": {
              "error": "Failed to Save",
              "success": "Successfully Saved"
          }
        },
        "onClickApproveButton": {
          "#validate": {},
          "#confirmation": {
            "title": "Approve Emergency Contact Details",
            "message": "By approving, you confirm that all emergency contact details are accurate and satisfactory.",
            "confirmText": "Yes, Approve",
            "confirmDisplayType": "label-feedback-success"
          },
          "#save": {
            "action": "Approve",
            "skipFormData": true
          },
          "#toast": {
            "error": "Emergency Contact Details Approval Failed",
            "success": "Emergency Contact Details Have Been Approved"
          }
        },
        "onClickRejectButton": {
          "#validate": {},
          "#prompt": {
            "title": "Reject Emergency Contacts",
            "confirmDisplayType": "label-feedback-reject",
            "message": "Rejecting the emergency contact details will prompt the new hire to resubmit the necessary details. The reason for rejection will be sent to the new hire.",
            "confirmText": "Yes, Reject",
            "cancelText": "No, Cancel",
            "inputType": "textarea",
            "inputLabel": "Comment"
          },
          "#save": {
            "action": "Reject",
            "skipFormData": true
          },
          "#toast": {
            "error": "Emergency Contact Details Rejection Failed",
            "success": "Emergency Contact Details Have Been Rejected"
          }
        }
      }
    }
  }
}');

UPDATE ohrm_dynamic_form SET meta_data = @metadata WHERE id = @dynamic_form_id;
UPDATE ohrm_dynamic_form_version SET meta_data = @metadata WHERE id = @dynamic_form_version_id;
