export function funktionDoppelteInterpolation(SuchSpalte: number, DatenZeile: number, dataZeile: any, dataBox: any): number {

    function interpolate(x: number, x0: number, y0: number, x1: number, y1: number): number {
        return y0 + ((y1 - y0) * (x - x0)) / (x1 - x0);
    }
    
    function findNearestPoints(data: any[], value: number, key: string): any[] {
        let lower = data[0];
        let upper = data[data.length - 1];
    
        for (let i = 0; i < data.length - 1; i++) {
            if (data[i][key][0] <= value && data[i + 1][key][0] >= value) {
                lower = data[i];
                upper = data[i + 1];
                break;
            }
        }
    
        return [lower, upper];
    }


    const [lowerSuchSpalte, upperSuchSpalte] = findNearestPoints(dataBox, SuchSpalte, 'SuchSpalte');
    const lowerIndex = dataZeile[0].DatenZeile.findIndex((val: number) => val >= DatenZeile) - 1;
    const upperIndex = lowerIndex + 1;

    const lowerDatenZeile = dataZeile[0].DatenZeile[lowerIndex];
    const upperDatenZeile = dataZeile[0].DatenZeile[upperIndex];

    const lowerDatenSpalte = interpolate(DatenZeile, lowerDatenZeile, lowerSuchSpalte.DatenSpalte[lowerIndex], upperDatenZeile, lowerSuchSpalte.DatenSpalte[upperIndex]);
    const upperDatenSpalte = interpolate(DatenZeile, lowerDatenZeile, upperSuchSpalte.DatenSpalte[lowerIndex], upperDatenZeile, upperSuchSpalte.DatenSpalte[upperIndex]);

    return interpolate(SuchSpalte, lowerSuchSpalte.SuchSpalte[0], lowerDatenSpalte, upperSuchSpalte.SuchSpalte[0], upperDatenSpalte);
}