import { AddLinkEventTracker, ClubGiftInfoEvent, CreateLinkEvent, GetClubGiftInfo, ILinkEventTracker, RemoveLinkEventTracker, ScrGetKickbackInfoMessageComposer, ScrKickbackData, ScrSendKickbackInfoMessageEvent } from '@nitrots/nitro-renderer'; import { FC, useEffect, useState } from 'react'; import { ClubStatus, FriendlyTime, GetClubBadge, GetConfigurationValue, LocalizeText, SendMessageComposer } from '../../api'; import { Button, Column, Flex, LayoutAvatarImageView, LayoutBadgeImageView, NitroCardContentView, NitroCardHeaderView, NitroCardView, Text } from '../../common'; import { useInventoryBadges, useMessageEvent, usePurse, useSessionInfo } from '../../hooks'; export const HcCenterView: FC<{}> = props => { const [ isVisible, setIsVisible ] = useState(false); const [ kickbackData, setKickbackData ] = useState(null); const [ unclaimedGifts, setUnclaimedGifts ] = useState(0); const [ badgeCode, setBadgeCode ] = useState(null); const { userFigure = null } = useSessionInfo(); const { purse = null, clubStatus = null } = usePurse(); const { badgeCodes = [], activate = null, deactivate = null } = useInventoryBadges(); const getClubText = () => { if(purse.clubDays <= 0) return LocalizeText('purse.clubdays.zero.amount.text'); if((purse.minutesUntilExpiration > -1) && (purse.minutesUntilExpiration < (60 * 24))) { return FriendlyTime.shortFormat(purse.minutesUntilExpiration * 60); } return FriendlyTime.shortFormat(((purse.clubPeriods * 31) + purse.clubDays) * 86400); }; const getInfoText = () => { switch(clubStatus) { case ClubStatus.ACTIVE: return LocalizeText(`hccenter.status.${ clubStatus }.info`, [ 'timeleft', 'joindate', 'streakduration' ], [ getClubText(), kickbackData?.firstSubscriptionDate, FriendlyTime.shortFormat(kickbackData?.currentHcStreak * 86400) ]); case ClubStatus.EXPIRED: return LocalizeText(`hccenter.status.${ clubStatus }.info`, [ 'joindate' ], [ kickbackData?.firstSubscriptionDate ]); default: return LocalizeText(`hccenter.status.${ clubStatus }.info`); } }; const getHcPaydayTime = () => (!kickbackData || kickbackData.timeUntilPayday < 60) ? LocalizeText('hccenter.special.time.soon') : FriendlyTime.shortFormat(kickbackData.timeUntilPayday * 60); const getHcPaydayAmount = () => LocalizeText('hccenter.special.sum', [ 'credits' ], [ (kickbackData?.creditRewardForStreakBonus + kickbackData?.creditRewardForMonthlySpent).toString() ]); useMessageEvent(ClubGiftInfoEvent, event => { const parser = event.getParser(); setUnclaimedGifts(parser.giftsAvailable); }); useMessageEvent(ScrSendKickbackInfoMessageEvent, event => { const parser = event.getParser(); setKickbackData(parser.data); }); useEffect(() => { const linkTracker: ILinkEventTracker = { linkReceived: (url: string) => { const parts = url.split('/'); if(parts.length < 2) return; switch(parts[1]) { case 'open': if(parts.length > 2) { switch(parts[2]) { case 'hccenter': setIsVisible(true); break; } } return; } }, eventUrlPrefix: 'habboUI/' }; AddLinkEventTracker(linkTracker); return () => RemoveLinkEventTracker(linkTracker); }, []); useEffect(() => { setBadgeCode(GetClubBadge(badgeCodes)); }, [ badgeCodes ]); useEffect(() => { if(!isVisible) return; const id = activate(); return () => deactivate(id); }, [ isVisible, activate, deactivate ]); useEffect(() => { SendMessageComposer(new GetClubGiftInfo()); SendMessageComposer(new ScrGetKickbackInfoMessageComposer()); }, []); if(!isVisible) return null; const popover = ( <>
{ LocalizeText('hccenter.breakdown.title') }
{ LocalizeText('hccenter.breakdown.creditsspent', [ 'credits' ], [ kickbackData?.totalCreditsSpent.toString() ]) }
{ LocalizeText('hccenter.breakdown.paydayfactor.percent', [ 'percent' ], [ (kickbackData?.kickbackPercentage * 100).toString() ]) }
{ LocalizeText('hccenter.breakdown.streakbonus', [ 'credits' ], [ kickbackData?.creditRewardForStreakBonus.toString() ]) }

{ LocalizeText('hccenter.breakdown.total', [ 'credits', 'actual' ], [ getHcPaydayAmount(), ((((kickbackData?.kickbackPercentage * kickbackData?.totalCreditsSpent) + kickbackData?.creditRewardForStreakBonus) * 100) / 100).toString() ]) }
CreateLinkEvent('habbopages/' + GetConfigurationValue('hc.center')['payday.habbopage']) }> { LocalizeText('hccenter.special.infolink') }
); return ( setIsVisible(false) } />
{ LocalizeText('hccenter.status.' + clubStatus) }
{ GetConfigurationValue('hc.center')['payday.info'] &&

{ LocalizeText('hccenter.special.title') }

{ LocalizeText('hccenter.special.info') }
CreateLinkEvent('habbopages/' + GetConfigurationValue('hc.center')['payday.habbopage']) }>{ LocalizeText('hccenter.special.infolink') }
{ LocalizeText('hccenter.special.time.title') }
{ getHcPaydayTime() }
{ clubStatus === ClubStatus.ACTIVE &&
{ LocalizeText('hccenter.special.amount.title') }
{ getHcPaydayAmount() }
{ LocalizeText('hccenter.breakdown.infolink') }
}
} { GetConfigurationValue('hc.center')['gift.info'] &&

{ LocalizeText('hccenter.gift.title') }

0 ? LocalizeText('hccenter.unclaimedgifts', [ 'unclaimedgifts' ], [ unclaimedGifts.toString() ]) : LocalizeText('hccenter.gift.info') } }>
} { GetConfigurationValue('hc.center')['benefits.info'] &&
{ LocalizeText('hccenter.general.title') }
} ); };