import { __, s__ } from '~/locale';

/**
 * Generates empty state messages for Service Desk issues list.
 *
 * @param {emptyStateMeta} emptyStateMeta - Meta data used to generate empty state messages
 * @returns {Object} Object containing empty state messages generated using the meta data.
 */
export function generateMessages(emptyStateMeta) {
  const {
    svgPath,
    serviceDeskHelpPage,
    serviceDeskAddress,
    editProjectPage,
    incomingEmailHelpPage,
  } = emptyStateMeta;

  const serviceDeskSupportedTitle = s__(
    'ServiceDesk|Use Service Desk to connect with your users and offer customer support through email right inside GitLab',
  );

  const serviceDeskSupportedMessage = s__(
    'ServiceDesk|Issues created from Service Desk emails will appear here. Each comment becomes part of the email conversation.',
  );

  const commonDescription = `
  <span>${serviceDeskSupportedMessage}</span>
  <a href="${serviceDeskHelpPage}">${__('Learn more.')}</a>`;

  return {
    serviceDeskEnabledAndCanEditProjectSettings: {
      title: serviceDeskSupportedTitle,
      svgPath,
      description: `<p>${s__('ServiceDesk|Your users can send emails to this address:')}
      <code>${serviceDeskAddress}</code>
      </p>
      ${commonDescription}`,
    },
    serviceDeskEnabledAndCannotEditProjectSettings: {
      title: serviceDeskSupportedTitle,
      svgPath,
      description: commonDescription,
    },
    serviceDeskDisabledAndCanEditProjectSettings: {
      title: serviceDeskSupportedTitle,
      svgPath,
      description: commonDescription,
      primaryLink: editProjectPage,
      primaryText: s__('ServiceDesk|Enable Service Desk'),
    },
    serviceDeskDisabledAndCannotEditProjectSettings: {
      title: serviceDeskSupportedTitle,
      svgPath,
      description: commonDescription,
    },
    serviceDeskIsNotSupported: {
      title: s__('ServiceDesk|Service Desk is not supported'),
      svgPath,
      description: s__(
        'ServiceDesk|To enable Service Desk on this instance, an instance administrator must first set up incoming email.',
      ),
      primaryLink: incomingEmailHelpPage,
      primaryText: __('Learn more.'),
    },
    serviceDeskIsNotEnabled: {
      title: s__('ServiceDesk|Service Desk is not enabled'),
      svgPath,
      description: s__(
        'ServiceDesk|For help setting up the Service Desk for your instance, please contact an administrator.',
      ),
    },
  };
}

/**
 * Returns the attributes used for gl-empty-state in the Service Desk issues list.
 *
 * @param {Object} emptyStateMeta - Meta data used to generate empty state messages
 * @returns {Object}
 */
export function emptyStateHelper(emptyStateMeta) {
  const messages = generateMessages(emptyStateMeta);

  const { isServiceDeskSupported, canEditProjectSettings, isServiceDeskEnabled } = emptyStateMeta;

  if (isServiceDeskSupported) {
    if (isServiceDeskEnabled && canEditProjectSettings) {
      return messages.serviceDeskEnabledAndCanEditProjectSettings;
    }

    if (isServiceDeskEnabled && !canEditProjectSettings) {
      return messages.serviceDeskEnabledAndCannotEditProjectSettings;
    }

    // !isServiceDeskEnabled && canEditProjectSettings
    if (canEditProjectSettings) {
      return messages.serviceDeskDisabledAndCanEditProjectSettings;
    }

    // !isServiceDeskEnabled && !canEditProjectSettings
    return messages.serviceDeskDisabledAndCannotEditProjectSettings;
  }

  // !serviceDeskSupported && canEditProjectSettings
  if (canEditProjectSettings) {
    return messages.serviceDeskIsNotSupported;
  }

  // !serviceDeskSupported && !canEditProjectSettings
  return messages.serviceDeskIsNotEnabled;
}
