'One Time', self::MONTHLY => 'Monthly', self::QUARTERLY => 'Quarterly', self::SEMI_ANNUALLY => 'Semi Annually', self::ANNUALLY => 'Annually', self::BIENNIALLY => 'Biennially', self::TRIENNIALLY => 'Triennially', }; } public function months(): int { return match ($this) { self::ONE_TIME => 0, self::MONTHLY => 1, self::QUARTERLY => 3, self::SEMI_ANNUALLY => 6, self::ANNUALLY => 12, self::BIENNIALLY => 24, self::TRIENNIALLY => 36, }; } /** * Resolve from the legacy admin integer billing code: * 2 → monthly, 3 → quarterly, 4 → semi_annually, 5 → annually */ public static function fromLegacyCode(int $code): self { return match ($code) { 2 => self::MONTHLY, 3 => self::QUARTERLY, 4 => self::SEMI_ANNUALLY, 5 => self::ANNUALLY, 6 => self::BIENNIALLY, 7 => self::TRIENNIALLY, default => self::MONTHLY, }; } }