import { Text } from '@/components/ui/text';
import { View } from '@/components/ui/view';
import { useColor } from '@/hooks/useColor';
import { BORDER_RADIUS } from '@/theme/globals';
import React from 'react';
import { Alert as RNAlert, TextStyle, ViewStyle } from 'react-native';
type AlertVariant = 'default' | 'destructive';
interface AlertProps {
children: React.ReactNode;
variant?: AlertVariant;
style?: ViewStyle;
}
// Visual Alert Component (existing functionality)
export function Alert({ children, variant = 'default', style }: AlertProps) {
const borderColor = useColor('border');
const destructiveColor = useColor('destructive');
const backgroundColor = useColor('card');
return (
{children}
);
}
interface AlertTitleProps {
children: React.ReactNode;
style?: TextStyle;
}
export function AlertTitle({ children, style }: AlertTitleProps) {
return (
{children}
);
}
interface AlertDescriptionProps {
children: React.ReactNode;
style?: TextStyle;
}
export function AlertDescription({ children, style }: AlertDescriptionProps) {
return (
{children}
);
}
// Native Alert Functions
interface AlertButton {
text: string;
onPress?: () => void;
style?: 'default' | 'cancel' | 'destructive';
}
interface NativeAlertOptions {
title: string;
message?: string;
buttons?: AlertButton[];
cancelable?: boolean;
}
// Two-button native alert
export const createTwoButtonAlert = (options: NativeAlertOptions) => {
const { title, message, buttons } = options;
const defaultButtons: AlertButton[] = [
{
text: 'Cancel',
onPress: () => console.log('Cancel Pressed'),
style: 'cancel',
},
{
text: 'OK',
onPress: () => console.log('OK Pressed'),
},
];
RNAlert.alert(title, message, buttons || defaultButtons);
};
// Three-button native alert
export const createThreeButtonAlert = (options: NativeAlertOptions) => {
const { title, message, buttons } = options;
const defaultButtons: AlertButton[] = [
{
text: 'Ask me later',
onPress: () => console.log('Ask me later pressed'),
},
{
text: 'Cancel',
onPress: () => console.log('Cancel Pressed'),
style: 'cancel',
},
{
text: 'OK',
onPress: () => console.log('OK Pressed'),
},
];
RNAlert.alert(title, message, buttons || defaultButtons);
};
// Generic native alert function
export const showNativeAlert = (options: NativeAlertOptions) => {
const { title, message, buttons, cancelable = true } = options;
if (!buttons || buttons.length === 0) {
// Simple alert with just OK button
RNAlert.alert(title, message, [
{
text: 'OK',
onPress: () => console.log('OK Pressed'),
},
]);
} else {
RNAlert.alert(title, message, buttons, { cancelable });
}
};
// Convenience functions for common alert types
export const showSuccessAlert = (
title: string,
message?: string,
onOk?: () => void
) => {
showNativeAlert({
title,
message,
buttons: [
{
text: 'OK',
onPress: onOk || (() => console.log('Success acknowledged')),
},
],
});
};
export const showErrorAlert = (
title: string,
message?: string,
onOk?: () => void
) => {
showNativeAlert({
title,
message,
buttons: [
{
text: 'OK',
onPress: onOk || (() => console.log('Error acknowledged')),
style: 'destructive',
},
],
});
};
export const showConfirmAlert = (
title: string,
message?: string,
onConfirm?: () => void,
onCancel?: () => void
) => {
showNativeAlert({
title,
message,
buttons: [
{
text: 'Cancel',
onPress: onCancel || (() => console.log('Cancelled')),
style: 'cancel',
},
{
text: 'Confirm',
onPress: onConfirm || (() => console.log('Confirmed')),
},
],
});
};
// Export the React Native Alert for direct use
export { RNAlert as NativeAlert };