import {useMemo, useState} from 'react'
import {View} from 'react-native'
import {type AppBskyActorDefs, moderateProfile} from '@atproto/api'
import {msg, Trans} from '@lingui/macro'
import {useLingui} from '@lingui/react'
import {differenceInSeconds} from 'date-fns'
import {HITSLOP_10} from '#/lib/constants'
import {useGetTimeAgo} from '#/lib/hooks/useTimeAgo'
import {sanitizeDisplayName} from '#/lib/strings/display-names'
import {isNative} from '#/platform/detection'
import {useModerationOpts} from '#/state/preferences/moderation-opts'
import {useSession} from '#/state/session'
import {atoms as a, useTheme, web} from '#/alf'
import {Button, ButtonText} from '#/components/Button'
import * as Dialog from '#/components/Dialog'
import {useDialogControl} from '#/components/Dialog'
import {Newskie} from '#/components/icons/Newskie'
import * as StarterPackCard from '#/components/StarterPack/StarterPackCard'
import {Text} from '#/components/Typography'
export function NewskieDialog({
profile,
disabled,
}: {
profile: AppBskyActorDefs.ProfileViewDetailed
disabled?: boolean
}) {
const {_} = useLingui()
const control = useDialogControl()
const createdAt = profile.createdAt as string | undefined
const [now] = useState(() => Date.now())
const daysOld = useMemo(() => {
if (!createdAt) return Infinity
return differenceInSeconds(now, new Date(createdAt)) / 86400
}, [createdAt, now])
if (!createdAt || daysOld > 7) return null
return (
)
}
function DialogInner({
profile,
createdAt,
now,
}: {
profile: AppBskyActorDefs.ProfileViewDetailed
createdAt: string
now: number
}) {
const control = Dialog.useDialogContext()
const {_} = useLingui()
const t = useTheme()
const moderationOpts = useModerationOpts()
const {currentAccount} = useSession()
const timeAgo = useGetTimeAgo()
const isMe = profile.did === currentAccount?.did
const profileName = useMemo(() => {
if (!moderationOpts) return profile.displayName || profile.handle
const moderation = moderateProfile(profile, moderationOpts)
return sanitizeDisplayName(
profile.displayName || profile.handle,
moderation.ui('displayName'),
)
}, [moderationOpts, profile])
const getJoinMessage = () => {
const timeAgoString = timeAgo(createdAt, now, {format: 'long'})
if (isMe) {
if (profile.joinedViaStarterPack) {
return _(
msg`You joined Bluesky using a starter pack ${timeAgoString} ago`,
)
} else {
return _(msg`You joined Bluesky ${timeAgoString} ago`)
}
} else {
if (profile.joinedViaStarterPack) {
return _(
msg`${profileName} joined Bluesky using a starter pack ${timeAgoString} ago`,
)
} else {
return _(msg`${profileName} joined Bluesky ${timeAgoString} ago`)
}
}
}
return (
{isMe ? Welcome, friend! : Say hello!}
{getJoinMessage()}
{profile.joinedViaStarterPack ? (
control.close()}>
) : null}
{isNative && (
)}
)
}