import CONSTANTS from "../../config/constants";
import { complaintLog } from "../serviceLog";
import autoComplaintDB from "./autoComplaint.model";

async function checkComplaint() {
  const C = "Complaint Worker";
  const F = "checkComplaint";

  try {
    const actionRequiredComplaints =
      await autoComplaintDB.getActionRequiredComplaints();

    complaintLog.info(
      `[${C}], [${F}], Action Required Complaints [${JSON.stringify(actionRequiredComplaints)}], Complaint Worker Started`,
    );

    if (actionRequiredComplaints && actionRequiredComplaints.length > 0) {
      for (const complaint of actionRequiredComplaints) {
        complaintLog.info(
          `[${C}], [${F}], Client Id [${complaint?.clientId}], Complaint Id [${complaint?.id}], Complaint Status [${complaint?.status}], Complaint Created At [${complaint?.createdAt}], Complaint Resolution Time Limit [${complaint?.resolutionTime}], Complaint Rule Id [${complaint?.ruleApplied}]`,
        );

        const rule = await autoComplaintDB.getComplaintRuleById({
          id: complaint?.ruleApplied,
        });

        if (!rule) {
          complaintLog.info(
            `[${C}], [${F}], Client Id [${complaint?.clientId}], Rule Id [${complaint?.ruleApplied}], No Active Rule Found With Id, Skipping complaint handling`,
          );

          continue;
        }

        if (
          rule.escalationStep ===
          CONSTANTS.COMPLAINT_RULE_ESCALATION_STEP.NO_ACTION
        ) {
          complaintLog.info(
            `[${C}], [${F}], Client Id [${complaint?.clientId}], Rule Id [${rule?.id}], Rule Escaltion Step [${rule?.escalationStep}], No Action Required Skipping`,
          );

          continue;
        }

        //NOTIFY SUPERVISOR
        if (
          Number(rule?.escalationStep) === CONSTANTS.COMPLAINT_RULE_ESCALATION_STEP.NOTIFY_SUPERVISOR ||
          Number(rule?.escalationStep) === CONSTANTS.COMPLAINT_RULE_ESCALATION_STEP.REASSIGN_AND_NOTIFY
        ) {
          

        }

        if (Number(rule?.notifyClient) === 1) {

        }

        if (
          Number(rule.escalationStep) ===
            CONSTANTS.COMPLAINT_RULE_ESCALATION_STEP.REASSIGN_AND_NOTIFY &&
          Number(rule?.supervisorAssignedTo) > 0
        ) {
          await autoComplaintDB.updateAssignedTo({
            id: complaint.id,
            assignedTo: rule?.supervisorAssignedTo,
          });
        }
      }
    }

    complaintLog.info(`[${C}], [${F}], Queue Worker Completed`);

    process.exit();
  } catch (error) {
    complaintLog.info(`[${C}], [${F}], Error [${error}]`);
    process.exit();
  }
}

checkComplaint();
