Fortune-Email/src/emails/admin/UserSuspensionEmail.tsx

248 lines
8.0 KiB
TypeScript
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import { Section, Text, Heading, Hr } from "@react-email/components";
import { EmailLayout } from "../../components/EmailLayout";
import { useBrandingConfig } from "../../hooks/useBrandingConfig";
import { formatDate } from "../../utils/emailHelpers";
interface UserSuspensionEmailProps {
userId?: string;
username?: string;
email?: string;
suspensionType?: "temporary" | "permanent" | "warning";
suspensionReason?: string;
suspensionDuration?: number; // in days
suspensionStartDate?: Date | string;
suspensionEndDate?: Date | string;
violationDetails?: string[];
administrator?: string;
appealInformation?: string;
}
export const UserSuspensionEmail = ({
userId = "ACC-12345",
username = "player123",
email = "player@example.com",
suspensionType = "temporary",
suspensionReason = "Violation of terms of service - Suspicious betting patterns detected",
suspensionDuration = 30,
suspensionStartDate = new Date(),
suspensionEndDate = new Date(Date.now() + 30 * 24 * 60 * 60 * 1000),
violationDetails = [
"Multiple accounts detected",
"Violation of betting rules",
"Suspicious activity patterns",
],
administrator = "Security Team",
appealInformation = "To appeal this decision, please contact support@example.com within 7 days.",
}: UserSuspensionEmailProps) => {
const config = useBrandingConfig();
const getSuspensionColor = (type: string) => {
switch (type) {
case "permanent":
return "#dc3545"; // Red
case "temporary":
return "#ffc107"; // Yellow
case "warning":
return "#17a2b8"; // Blue
default:
return config.colors.primary;
}
};
const getSuspensionLabel = (type: string) => {
switch (type) {
case "permanent":
return "Permanent Suspension";
case "temporary":
return "Temporary Suspension";
case "warning":
return "Account Warning";
default:
return "Account Action";
}
};
return (
<EmailLayout title={`🚫 ${getSuspensionLabel(suspensionType)} - Action Required`}>
<Section>
<Section
style={{
backgroundColor: getSuspensionColor(suspensionType) + "15",
padding: "20px",
borderRadius: "8px",
marginBottom: "20px",
border: `2px solid ${getSuspensionColor(suspensionType)}`,
}}
>
<Heading
style={{
fontSize: "24px",
color: getSuspensionColor(suspensionType),
marginTop: 0,
marginBottom: "10px",
}}
>
{getSuspensionLabel(suspensionType)}
</Heading>
<Text style={{ fontSize: "16px", fontWeight: "bold", margin: "5px 0" }}>
User: {username}
</Text>
<Text style={{ fontSize: "14px", color: "#666666", margin: "5px 0" }}>
Account ID: {userId}
</Text>
</Section>
<Hr style={{ borderColor: config.colors.primary, margin: "30px 0" }} />
{/* User Information */}
<Section style={{ marginBottom: "25px" }}>
<Heading
style={{
fontSize: "20px",
color: config.colors.text,
marginTop: "20px",
marginBottom: "15px",
}}
>
👤 Account Information
</Heading>
<Section
style={{
backgroundColor: config.colors.background,
padding: "15px",
borderRadius: "4px",
}}
>
<Text style={{ fontSize: "14px", margin: "8px 0" }}>
<strong>Username:</strong> {username}
</Text>
<Text style={{ fontSize: "14px", margin: "8px 0" }}>
<strong>Email:</strong> {email}
</Text>
<Text style={{ fontSize: "14px", margin: "8px 0" }}>
<strong>Account ID:</strong> {userId}
</Text>
</Section>
</Section>
{/* Suspension Details */}
<Section style={{ marginBottom: "25px" }}>
<Heading
style={{
fontSize: "20px",
color: config.colors.text,
marginTop: "20px",
marginBottom: "15px",
}}
>
Suspension Details
</Heading>
<Section
style={{
backgroundColor: "#fff3cd",
padding: "15px",
borderRadius: "4px",
border: "1px solid #ffc107",
}}
>
<Text style={{ fontSize: "14px", fontWeight: "bold", margin: "0 0 10px 0" }}>
Reason:
</Text>
<Text style={{ fontSize: "14px", margin: "0 0 20px 0" }}>{suspensionReason}</Text>
{suspensionType === "temporary" && (
<>
<Text style={{ fontSize: "14px", fontWeight: "bold", margin: "0 0 10px 0" }}>
Suspension Period:
</Text>
<Text style={{ fontSize: "14px", margin: "5px 0" }}>
<strong>Start Date:</strong> {formatDate(suspensionStartDate)}
</Text>
<Text style={{ fontSize: "14px", margin: "5px 0" }}>
<strong>End Date:</strong> {formatDate(suspensionEndDate)}
</Text>
<Text style={{ fontSize: "14px", margin: "5px 0 0 0" }}>
<strong>Duration:</strong> {suspensionDuration} days
</Text>
</>
)}
{suspensionType === "permanent" && (
<Text style={{ fontSize: "14px", margin: "10px 0 0 0", fontWeight: "bold" }}>
This suspension is permanent. Your account access has been revoked indefinitely.
</Text>
)}
</Section>
</Section>
{/* Violation Details */}
{violationDetails && violationDetails.length > 0 && (
<Section style={{ marginBottom: "25px" }}>
<Heading
style={{
fontSize: "20px",
color: config.colors.text,
marginTop: "20px",
marginBottom: "15px",
}}
>
📋 Violation Details
</Heading>
<Section
style={{
backgroundColor: config.colors.background,
padding: "15px",
borderRadius: "4px",
}}
>
<ul style={{ margin: 0, paddingLeft: "20px" }}>
{violationDetails.map((detail, index) => (
<li key={index} style={{ fontSize: "14px", margin: "8px 0" }}>
{detail}
</li>
))}
</ul>
</Section>
</Section>
)}
{/* Appeal Information */}
{appealInformation && (
<Section style={{ marginBottom: "25px" }}>
<Heading
style={{
fontSize: "20px",
color: config.colors.text,
marginTop: "20px",
marginBottom: "15px",
}}
>
📞 Appeal Process
</Heading>
<Section
style={{
backgroundColor: config.colors.primary + "10",
padding: "15px",
borderRadius: "4px",
border: `1px solid ${config.colors.primary}`,
}}
>
<Text style={{ fontSize: "14px", margin: 0 }}>{appealInformation}</Text>
</Section>
</Section>
)}
<Hr style={{ borderColor: config.colors.primary, margin: "30px 0" }} />
<Text style={{ fontSize: "12px", color: "#666666", fontStyle: "italic" }}>
This is an automated notification from the {config.companyName} security system.
<br />
Processed by: {administrator}
<br />
Timestamp: {new Date().toLocaleString()}
</Text>
</Section>
</EmailLayout>
);
};