import styled from '@emotion/styled';
import {Button} from 'sentry/components/core/button';
import Panel from 'sentry/components/panels/panel';
import {t, tct} from 'sentry/locale';
import {space} from 'sentry/styles/space';
import type {Organization} from 'sentry/types/organization';
import TextBlock from 'sentry/views/settings/components/text/textBlock';
import {openUpsellModal} from 'getsentry/actionCreators/modal';
import AddEventsCTA from 'getsentry/components/addEventsCTA';
import withSubscription from 'getsentry/components/withSubscription';
import type {Subscription} from 'getsentry/types';
import {
getBestActionToIncreaseEventLimits,
hasPerformance,
} from 'getsentry/utils/billing';
import {ButtonWrapper, SubscriptionBody} from 'getsentry/views/subscriptionPage/styles';
import TrialBadge from 'getsentry/views/subscriptionPage/trial/badge';
type Props = {
organization: Organization;
subscription: Subscription;
referrer?: string;
};
function OrgStatsBanner({organization, subscription, referrer}: Props) {
if (!subscription.canSelfServe || !hasPerformance(subscription.planDetails)) {
return null;
}
referrer = referrer || 'org-stats';
const props = {
organization,
subscription,
referrer,
source: referrer,
buttonProps: {
size: 'sm' as const,
},
};
const isPaidPlan = subscription.planDetails.price > 0;
// only show start trial if on a free plan and trial available
const showStartTrial = !isPaidPlan && subscription.canTrial;
const getTextContent = (): [string, string | React.JSX.Element] => {
const action = getBestActionToIncreaseEventLimits(organization, subscription);
switch (action) {
case 'start_trial':
return [
t('Try Sentry Business for Free'),
t("Activate your trial to take advantage of Sentry's Business plan features."),
];
case 'add_events':
return [
t('Increase your Reserved Quotas'),
t('Increase your reserved limits, because no one likes dropped data.'),
];
case 'request_add_events':
return [
t('Request an Increase to Reserved Limits'),
t('Bump your Organization’s owner to bump your limits.'),
];
case 'request_upgrade':
return [
t('Request an Upgrade to Business'),
tct(
'[italicized] your Organization’s owner to upgrade Sentry (See what I did there?).',
{
italicized: {t('Bug')},
}
),
];
case 'send_to_checkout':
default:
return [
t('Upgrade to Business'),
t(
'Advanced integrations, deep insights, custom dashboards, and more. Upgrade to Sentry’s Business plan today.'
),
];
}
};
const [headerText, subText] = getTextContent();
return (
{headerText}
{showStartTrial && (
)}
{subText}
{!isPaidPlan && (
)}
);
}
const Heading = styled('span')`
font-weight: 400;
font-size: ${p => p.theme.fontSizeExtraLarge};
margin-right: ${space(1)};
`;
const SubText = styled(TextBlock)`
color: ${p => p.theme.subText};
margin: 0;
`;
const TextWrapper = styled('div')`
display: grid;
grid-auto-rows: auto;
gap: ${space(1)};
`;
const HeaderWrapper = styled('div')`
display: flex;
`;
export default withSubscription(OrgStatsBanner, {noLoader: true});