package de.duehl.basics.io;

/*
 * Copyright 2026 Christian Dühl. All rights reserved.
 *
 * This program is free software. You can redistribute it and/or
 * modify it under the same terms as perl:
 *
 * general:  http://dev.perl.org/licenses/
 * GPL:      http://dev.perl.org/licenses/gpl1.html
 * artistic: http://dev.perl.org/licenses/artistic.html
 */

import java.io.FileNotFoundException;
import java.io.RandomAccessFile;
import java.io.IOException;

import de.duehl.basics.io.exceptions.FileNotFoundRuntimeException;
import de.duehl.basics.io.exceptions.IORuntimeException;

/**
 * Diese Klasse kapselt ein RandomEAccessFile so, dass man nicht dauernd mit try catch arbeiten
 * muss.
 *
 * @version 1.01     2026-07-08
 * @author Christian Dühl
 */

public class FineRandomAccessFile {

    /** Liest die Personendatei mit wahlfreiem Zugriff. */
    private final RandomAccessFile raf;

    /**
     * Konstruktor.
     *
     * @param filename
     *            Der Dateiname der zu öffnenden Datei.
     */
    public FineRandomAccessFile(String filename) {
        raf = openPersonFile(filename);
    }

    private RandomAccessFile openPersonFile(String filename) {
        try {
            return new RandomAccessFile(filename, "r");
        }
        catch (FileNotFoundException exception) {
            throw new FileNotFoundRuntimeException(exception);
        }
    }

    /** Liest die nächste Zeile ein. */
    public String readNextLine() {
        try {
            return raf.readLine();
        }
        catch (IOException exception) {
            throw new IORuntimeException(exception);
        }
    }

    /** Gibt den aktuellen Dateizeiger zurück. */
    public long getFilePointer() {
        try {
            return raf.getFilePointer();
        }
        catch (IOException exception) {
            throw new IORuntimeException(exception);
        }
    }

    /** Setzt den Dateizeiger an die angegebene Position. */
    public void seek(long position) {
        try {
            raf.seek(position);
        }
        catch (IOException exception) {
            throw new IORuntimeException(exception);
        }
    }


}
