import React, { useState } from 'react'; import { View, Text, ScrollView, Alert } from 'react-native'; import { useRouter } from 'expo-router'; import { useTheme } from '../../utils/ThemeContext'; import SubscriptionCard, { SubscriptionPlanProps } from './SubscriptionCard'; import PackageCard, { PackageProps } from './PackageCard'; import CostCard, { CostItem } from './CostCard'; import UsageCard, { UsageDataProps } from './UsageCard'; import BillingToggle from './BillingToggle'; import type { BillingCycle } from './BillingToggle'; // Importieren der Daten aus den JSON-Dateien import subscriptionData from './subscriptionData.json'; import appCostsData from './appCosts.json'; import usageData from './usageData.json'; // Verwenden der Daten aus den JSON-Dateien const subscriptionOptions: SubscriptionPlanProps[] = subscriptionData.subscriptions as SubscriptionPlanProps[]; const manaPackages: PackageProps[] = subscriptionData.packages as PackageProps[]; // Kosten für verschiedene Aktionen in der App aus der JSON-Datei laden const appCosts: CostItem[] = appCostsData.costs as CostItem[]; // Nutzungsdaten aus der JSON-Datei laden const usage: UsageDataProps = usageData.usage as UsageDataProps; interface SubscriptionPageProps { onSubscribe?: (planId: string, billingCycle: BillingCycle) => void; onBuyPackage?: (packageId: string) => void; } const SubscriptionPage: React.FC = ({ onSubscribe, onBuyPackage }) => { const router = useRouter(); const { theme } = useTheme(); const [billingCycle, setBillingCycle] = useState('monthly'); // In einer echten App würde dieser Wert aus dem Benutzerprofil oder der API kommen const [activeSubscription, setActiveSubscription] = useState( subscriptionOptions[0] ); const handleSubscribe = (planId: string) => { if (onSubscribe) { onSubscribe(planId, billingCycle); } else { // Fallback-Verhalten console.log(`Subscribing to plan: ${planId}, billing cycle: ${billingCycle}`); Alert.alert( 'Erfolgreich abonniert!', `Du hast erfolgreich das ${subscriptionOptions.find((p) => p.id === planId)?.name} Abo abgeschlossen.`, [{ text: 'OK', onPress: () => router.back() }] ); } }; const handleBuyPackage = (packageId: string) => { if (onBuyPackage) { onBuyPackage(packageId); } else { // Fallback-Verhalten console.log(`Buying package: ${packageId}`); const selectedPkg = manaPackages.find((p) => p.id === packageId); Alert.alert( 'Erfolgreich gekauft!', `Du hast erfolgreich das ${selectedPkg?.name} Paket mit ${selectedPkg?.manaAmount} Mana gekauft.`, [{ text: 'OK', onPress: () => router.back() }] ); } }; // Aktualisiere die Abonnement-Optionen basierend auf dem Abrechnungszyklus const getSubscriptionPlans = () => { // Filtere das kostenlose Abonnement heraus, da es bereits im Aktiv-Bereich angezeigt wird // Filtere auch nach dem ausgewählten Abrechnungszyklus const paidPlans = subscriptionOptions.filter( (plan) => plan.id !== 'free' && plan.billingCycle === billingCycle ); return paidPlans.map((plan) => { // Füge die monatliche Preisberechnung für jährliche Abos hinzu if (billingCycle === 'yearly' && plan.monthlyEquivalent) { return { ...plan, priceBreakdown: `(entspricht ${plan.monthlyEquivalent.toFixed(2).replace('.', ',')}€ pro Monat)`, }; } return plan; }); }; const renderSubscriptionOptions = () => { const plans = getSubscriptionPlans(); return ( {plans.map((plan) => ( ))} ); }; const renderPackageOptions = () => { // Pakete in reguläre und Team-Pakete aufteilen const regularPackages = manaPackages.filter((pkg) => !pkg.isTeamPackage); const teamPackages = manaPackages.filter((pkg) => pkg.isTeamPackage); return ( Mana-Pakete Kaufe einmalig Mana, um mehr Figuren zu generieren. {regularPackages.map((pkg) => ( ))} {teamPackages.length > 0 && ( <> Team-Pakete Spezielle Pakete für Teams mit mehr Mana und zusätzlichen Funktionen. {teamPackages.map((pkg) => ( ))} )} ); }; // Filtert beliebte Abonnements und Pakete const getPopularItems = () => { const popularSubscriptions = subscriptionOptions.filter((sub) => sub.popular); const popularPackages = manaPackages.filter((pkg) => pkg.popular); return { popularSubscriptions, popularPackages }; }; // Render des "Beliebt"-Abschnitts const renderPopularSection = () => { const { popularSubscriptions, popularPackages } = getPopularItems(); // Wenn keine beliebten Items vorhanden sind, zeige den Abschnitt nicht an if (popularSubscriptions.length === 0 && popularPackages.length === 0) { return null; } return ( Beliebt {/* Beliebte Abonnements */} {popularSubscriptions.map((plan) => ( ))} {/* Beliebte Pakete */} {popularPackages.map((pkg) => ( ))} ); }; // Render des aktiven Abonnements und der Kosten const renderActiveSection = () => { return ( Aktiv {/* Aktives Abonnement */} {}} /> {/* Nutzungs-Karte */} {/* Kosten-Karte */} ); }; return ( {/* Aktiver Abschnitt */} {renderActiveSection()} {/* Beliebter Abschnitt */} {renderPopularSection()} {/* Abonnements-Abschnitt */} Abonnements {renderSubscriptionOptions()} {/* Pakete-Abschnitt */} Pakete {renderPackageOptions()} ); }; export default SubscriptionPage;