import {openCreateNewIntegrationModal} from 'sentry/actionCreators/modal';
import Access from 'sentry/components/acl/access';
import {Button} from 'sentry/components/button';
import {t} from 'sentry/locale';
import type {Organization} from 'sentry/types/organization';
import type {IntegrationView} from 'sentry/utils/analytics/integrations';
import {PlatformEvents} from 'sentry/utils/analytics/integrations/platformAnalyticsEvents';
import {trackIntegrationAnalytics} from 'sentry/utils/integrationUtil';
import withOrganization from 'sentry/utils/withOrganization';

type CreateIntegrationButtonProps = {
  analyticsView: IntegrationView['view'];
  organization: Organization;
};

/**
 * Button to open the modal to create a new public/internal integration (Sentry App)
 */
function CreateIntegrationButton({
  organization,
  analyticsView,
}: CreateIntegrationButtonProps) {
  const permissionTooltipText = t(
    'Manager or Owner permissions are required to create a new integration'
  );

  return (
    <Access access={['org:write']}>
      {({hasAccess}) => (
        <Button
          size="sm"
          priority="primary"
          disabled={!hasAccess}
          title={!hasAccess ? permissionTooltipText : undefined}
          onClick={() => {
            openCreateNewIntegrationModal({organization});
            trackIntegrationAnalytics(PlatformEvents.OPEN_CREATE_MODAL, {
              organization,
              view: analyticsView,
            });
          }}
        >
          {t('Create New Integration')}
        </Button>
      )}
    </Access>
  );
}

export default withOrganization(CreateIntegrationButton);