001/*
002 * Copyright © 2025 CUI-OpenSource-Software (info@cuioss.de)
003 *
004 * Licensed under the Apache License, Version 2.0 (the "License");
005 * you may not use this file except in compliance with the License.
006 * You may obtain a copy of the License at
007 *
008 *     http://www.apache.org/licenses/LICENSE-2.0
009 *
010 * Unless required by applicable law or agreed to in writing, software
011 * distributed under the License is distributed on an "AS IS" BASIS,
012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013 * See the License for the specific language governing permissions and
014 * limitations under the License.
015 */
016package de.cuioss.test.generator.domain;
017
018import de.cuioss.test.generator.TypedGenerator;
019
020import static de.cuioss.test.generator.Generators.integers;
021
022/**
023 * Generates random German-style phone numbers for testing purposes.
024 * 
025 * <p>Phone number format: 0XXX/YYYY where:</p>
026 * <ul>
027 *   <li>XXX: Area code (100-999)</li>
028 *   <li>YYYY: Local number (1000-9999)</li>
029 * </ul>
030 * 
031 * <p>The generated numbers follow a simplified German phone number pattern:
032 * <ul>
033 *   <li>Always starts with '0' (domestic format)</li>
034 *   <li>3-digit area code</li>
035 *   <li>Forward slash separator</li>
036 *   <li>4-digit local number</li>
037 * </ul>
038 * 
039 * <p><em>Example outputs:</em></p>
040 * <pre>
041 * "0123/4567"
042 * "0789/1234"
043 * </pre>
044 * 
045 * <p><em>Example usage:</em></p>
046 * <pre>
047 * var generator = new PhoneNumberGenerator();
048 * String phoneNumber = generator.next(); // Returns a phone number like "0123/4567"
049 * </pre>
050 *
051 * @author Oliver Wolff
052 */
053public class PhoneNumberGenerator implements TypedGenerator<String> {
054
055    private final TypedGenerator<Integer> prepend = integers(100, 999);
056    private final TypedGenerator<Integer> number = integers(1000, 9999);
057
058    @Override
059    public String next() {
060        return "0" + prepend.next() + "/" + number.next();
061    }
062
063    @Override
064    public Class<String> getType() {
065        return String.class;
066    }
067}