const APPROVAL_EVENT_TYPES = new Set(['audit', 'reject']);

export function isApprovalOpinionRequired(properties: any, eventType: string) {
  return APPROVAL_EVENT_TYPES.has(eventType) && !!properties?.hasOpinion && !!properties?.opinionRequired;
}

export function hasApprovalOpinion(opinion: unknown) {
  return hasValue(opinion);
}

export function hasValue(value: unknown) {
  if (typeof value === 'string') return value.trim().length > 0;
  if (Array.isArray(value)) return value.length > 0;
  return value !== null && value !== undefined;
}

export function shouldOpenApprovalDrawer(values: unknown, properties: any, eventType: string, approvalForm: any) {
  if (values) return false;
  if (properties?.hasSign && !hasValue(approvalForm?.signImg)) return true;
  const hasApprovalFormInput =
    hasApprovalOpinion(approvalForm?.handleOpinion) || hasValue(approvalForm?.fileList) || approvalForm?.approvalField?.some((item) => hasValue(item.value));
  if (hasApprovalFormInput) return false;
  return isApprovalOpinionRequired(properties, eventType) || properties?.hasFile || properties?.hasApprovalField;
}
