#include <iostream>
#include <iomanip>
#include <cstdlib>
#include <vector>
#include <ctime>
#include "figures.h"

int main() {
	//создаём вектор указателей на фигуры и заполняем его случайными фигурами
	srand((unsigned int)time(NULL));
	const int nFigures = 10;
	std::vector<Figure *> figures (nFigures);
	for (int i = 0; i < nFigures; i++) {
		if (rand() % 2 == 0) {
			figures[i] = new Circle(Figure::Point(rand()%100, rand()%100), rand()%100+1, rand()%100);
		} else {
			//Создаём вектор из точек аля многоуольник
			std::vector<Figure::Point> vPolygon;
			int vertices = rand()%100;
			for (int j = 0; j < vertices; j++){
				vPolygon.push_back(Figure::Point(rand()%100,rand()%100));
			}
			//Замкнём ломаную 
			vPolygon.push_back(Figure::Point(vPolygon[0].x,vPolygon[0].y));
			figures[i] = new Polygon(vPolygon, rand()%100);	
		}
	}
	 

	//найдём суммарную площадь всех фигур
	double sumPlace = 0.0;
	for (int i = 0; i < nFigures; i++) {
		sumPlace += figures[i]->place();
	}
	std::cout << std::fixed << std::setprecision(6) <<
	"Sum place = " << sumPlace << std::endl;

	//найдём суммарный периметр всех фигур
	double sumPerimetr = 0.0;
	for (int i = 0; i < nFigures; i++) {
		sumPerimetr  += figures[i]->perimetr();
	}
	std::cout << std::fixed << std::setprecision(6) <<
	"Sum Perimetr = " << sumPerimetr  << std::endl;

	//уничтожим все объекты (хотя при завершении программы память и так очистится)
	for (int i = 0; i < nFigures; i++) {
		delete figures[i];
	}
	/*
	Figure *f = new Circle(Figure::Point(100,100),50,1);
	std::cout << *f;
	*/

	/*
	Figure *f = new Triangle(Figure::Point(rand()%100,rand()%100),Figure::Point(rand()%100,rand()%100),Figure::Point(rand()%100,rand()%100),rand()%100);
	std::cout << *f;
	*/


	/*
	//объявляем вектор из точек
	std::vector<Figure::Point> vPolygon;
	int vertices = rand()%100;
	for (int j = 0; j < vertices; j++){
		vPolygon.push_back(Figure::Point(rand()%100,rand()%100));
	}
	//Замкнём ломаную 
	vPolygon.push_back(Figure::Point(vPolygon[0].x,vPolygon[0].y));

	Figure *f =  new Polygon(vPolygon, rand()%100);	
	std::cout << *f;
	*/


	system("PAUSE");
	return 0;
}
