#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#include <stdint.h>
#include <inttypes.h>
#include <sys/types.h>
#include <unistd.h>
#define PI 3.141592654

int main(int argc, char **argv){
	//1,000,204,886,016
	//double bytes_pe500102443008
	double platters = 3;
	double heads = 6;
	double bytes = 1000204886016 * 3;
	double sectors_l = bytes / 512;
	double sectors_p = bytes / 4096;
	double tracks = 340000; //according to seagate
	double track_w = 0.000075; //mm
	double outert_circum = 88.9 * PI;
	double circum = 0;
	//double circum_last = 88.9 * PI;
	double bytes_p_track = 0;
	double tmp1 = 0;
	double tmp2 = 0;
	uint32_t num1 = 0;
	uint32_t num2 = 0;
	double circum_sums = 0;
	double bytes_per_linear_mm = 0;
	double short_bytes = 1000204886016 * 1.5;
	double tmp_cir_sums = 0;

	//get sum of circums
	for(num1=0; num1<tracks; num1++){
		circum = (88.9-(track_w*(double)num1*2))*PI;
		circum_sums += circum;
		//tmp1 = circum / circum_last;
		//printf("ratio: %lf\n", tmp1);
		//sleep(1);
		//circum_last = circum;
	}

	printf("platter linear mm per side: %lf\n", circum_sums);
	tmp1 = bytes/heads;
	//tmp1 /= circum_sums;
	tmp2 = tmp1 / circum_sums;
	printf("bytes per linear mm per side: %lf\n", tmp2);
	bytes_per_linear_mm = tmp2;

	//calculate short stroke param
	//tmp1 = circum_sums/2;
	circum = 0;
	num1 = 0;
	//for(num1=0; num1<tracks; num1++){
	printf("short byte target: %lf\n", short_bytes);
	while(tmp1 < short_bytes){
		circum = (88.9-(track_w*(double)num1*2))*PI;
		tmp_cir_sums += circum;
		tmp1 = bytes_per_linear_mm*tmp_cir_sums;
		tmp1 *= heads;
		num1++;
		if(num1 > tracks){
			printf("errror!\n");
			break;
		}
	}
	printf("tracks used: %d\n", num1);
	printf("bytes: %lf\n", tmp1);


	printf("outter track bytes: %lf\n", outert_circum*bytes_per_linear_mm);
	//printf("inner track bytes: %lf\n", 

	tmp1 = outert_circum*bytes_per_linear_mm*heads;
	tmp1 *= (7200/60);
	printf("estimated outter track bytes/s %lf\n", tmp1);
	circum = (88.9-(track_w*(double)num1*2))*PI;
	tmp1 = circum*bytes_per_linear_mm;
	circum = (88.9-(track_w*(double)tracks*2))*PI;
	tmp2 = circum*bytes_per_linear_mm;
	printf("inner track bytes: %lf\n", tmp1);

	tmp1 *= heads;
	tmp1 *= (7200/60);
	tmp2 *= heads;
	tmp2 *= (7200/60);
	printf("estimated inner track bytes/s %lf (before: %lf)\n", tmp1, tmp2);




	return 0;
}