#ifndef SORT_TASK_HPP
#define SORT_TASK_HPP

#include <iostream>
#include <algorithm>
#include <cstdlib>
#include <ctime>
#include <unistd.h>
#include "task.hpp"

class SortTask : public Task {
	private:
		int* matrix;
		int n;
		int write_fd;
	public:
		SortTask(int* mat, int size, int fd):matrix(mat) , n(size) , write_fd(fd) {}

		void execute_task(int worker_id,int worker_count) override{
//		srand(time(0)^getpid());
		for (int i=0; i<n; i++) {
			if (i%worker_count == worker_id %worker_count){
/*				int delay = 1 + rand()%3;
				std::cout<<"PID " <<getpid() << " PPID " << getppid()
				<<"[Worker " << worker_id << "] "
				<< " kanei tin taksinomisi " << i 
				<<" delay " << delay <<"s\n";
				sleep(delay);
*/			
			int* row_start=matrix +(i*n);

			std::sort(row_start,row_start+n);
			int* temp_array = new int[n+1];
			temp_array[0] = i;

			for(int j=0; j<n; j++){
				temp_array[j+1] = row_start[j];
			}
			write(write_fd,temp_array,(n+1)*sizeof(int));
			delete[] temp_array;
			}
		}
	}
};

#endif
