package sspr2;

import java.util.Arrays;
import java.util.Comparator;

public class SortMatrix {

    public static int[][] sortMatrix(int[][] matrix, int startRow, int endRow, int column, int[] indexColumn, String name) {
        int[][] tempMatrix = new int[endRow][column];
        int iterator = 1;
        for (int i = 0; i < column; i++) {
            for (int j = startRow; j < endRow; j++) {
                tempMatrix[j][i] = matrix[j][indexColumn[i]];
            }
            iterator++;
//            System.out.println(name + "закончил обрабатывать " + iterator + " колонку");
        }
        System.out.println(name + "закончил обрабатывать целиком свою половину");
        return tempMatrix;
    }

    public static int searchMaxAboveMainDiagonal(int[][] matrix, int startRow, int endRow, int column, String name) {
        int max = 0;
        System.out.println(name + "начал обрабатывать свою половину");
        for (int i = startRow; i < endRow; i++) {
            for (int j = i; j < column; j++) {
                if (matrix[i][j] > max) {
                    max = matrix[i][j];
                }
            }
        }
        System.out.println(name + "закончил обрабатывать целиком свою половину");
        return max;
    }

    public static int[] getIndexColumn(int[][] matrix, int column) {
        int[] maxElements = new int[column];
        for (int i = 0; i < column; i++) {
            for (int[] ints : matrix) {
                if (ints[i] > maxElements[i]) {
                    maxElements[i] = ints[i];
                }
            }
        }
        Integer[] indexColumn = new Integer[column];
        for (int i = 0; i < column; i++) {
            indexColumn[i] = i;
        }
        Arrays.sort(indexColumn, Comparator.comparingInt((Integer j) ->
                Arrays.stream(matrix).mapToInt(rows -> rows[j]).max().orElse(Integer.MIN_VALUE)).reversed()
        );
        return Arrays.stream(indexColumn).mapToInt(integer -> integer).toArray();
    }

}
