import type { NuzlockeRules } from '../types/rules' import { RULE_DEFINITIONS, DEFAULT_RULES } from '../types/rules' import { RuleToggle } from './RuleToggle' interface RulesConfigurationProps { rules: NuzlockeRules onChange: (rules: NuzlockeRules) => void onReset?: () => void hiddenRules?: Set } export function RulesConfiguration({ rules, onChange, onReset, hiddenRules, }: RulesConfigurationProps) { const visibleRules = hiddenRules ? RULE_DEFINITIONS.filter((r) => !hiddenRules.has(r.key)) : RULE_DEFINITIONS const coreRules = visibleRules.filter((r) => r.category === 'core') const difficultyRules = visibleRules.filter( (r) => r.category === 'difficulty' ) const completionRules = visibleRules.filter( (r) => r.category === 'completion' ) const handleRuleChange = (key: keyof NuzlockeRules, value: boolean) => { onChange({ ...rules, [key]: value }) } const handleResetToDefault = () => { onChange(DEFAULT_RULES) onReset?.() } const enabledCount = visibleRules.filter((r) => rules[r.key]).length const totalCount = visibleRules.length return (

Rules Configuration

{enabledCount} of {totalCount} rules enabled

Core Rules

The fundamental rules of a Nuzlocke challenge

{coreRules.map((rule) => ( handleRuleChange(rule.key, value)} /> ))}

Difficulty Modifiers

Optional rules to increase the challenge

{difficultyRules.map((rule) => ( handleRuleChange(rule.key, value)} /> ))}
{completionRules.length > 0 && (

Completion

When is the run considered complete

{completionRules.map((rule) => ( handleRuleChange(rule.key, value)} /> ))}
)}
) }