//
// Created by Nik on 11/04/2022.
//

#include "Diamand.h"

Diamand::Diamand(ColorCode color, unsigned int redius): Shape2D(color), redius(redius) {}

unsigned int Diamand::getSurfaceArea() const {
    return (redius*2+2)*2;
}

void Diamand::draw() const {

    int spacL1 = redius;
    int specR1 = 0;
    int spacL2 = 0;
    int specR2 = redius * 2;
    for (int i = 0; i < redius * 2 + 2; i++) {
        if (i <= redius) {
            for (int j = 0; j < spacL1; j++) std::cout << " ";
            PrintUtility::print(color, "*");
            for (int k = 0; k < specR1; k++) std::cout << " ";
            PrintUtility::print(color, "*");
            std::cout << "\n";
            specR1 += 2;
            spacL1 -= 1;
        }
        if (i > redius) {
            for (int j = 0; j < spacL2; j++) std::cout << " ";
            PrintUtility::print(color, "*");
            for (int k = 0; k < specR2; k++) std::cout << " ";
            PrintUtility::print(color, "*");
            std::cout << "\n";
            specR2 -= 2;
            spacL2 += 1;
        }
    }
}

std::string Diamand::getString() const {
    std::string ret;
    int spacL1 = redius;
    int specR1 = 0;
    int spacL2 = 0;
    int specR2 = redius * 2;
    for (int i = 0; i < redius * 2 + 2; i++) {
        if (i <= redius) {
            for (int j = 0; j < spacL1; j++) ret+=" ";
            ret+="*";
            for (int k = 0; k < specR1; k++) ret+=" ";
            ret+="*\n";
            specR1 += 2;
            spacL1 -= 1;
        }
        if (i > redius) {
            for (int j = 0; j < spacL2; j++) ret+=" ";
            ret+="*";
            for (int k = 0; k < specR2; k++) ret+=" ";
            ret+="*\n";
            specR2 -= 2;
            spacL2 += 1;
        }
    }
    return ret;
}