class Circle {
  constructor(public readonly radius: number) {}
}

class Square {
  constructor(public readonly length: number) {}
}

// Imaginons qu'on ajoute une autre forme ...
class Triangle {
  constructor(public readonly length: number) {}
}

class AreaCalculator {
  constructor(private readonly shapes: object[]) {}

  public sum(): number {
    let result = 0;

    for (const shape of this.shapes) {
      if (shape instanceof Circle) {
        result += Math.PI * Math.pow(shape.radius, 2);
      } else if (shape instanceof Square) {
        result += Math.pow(shape.length, 2);
      } else if (shape instanceof Triangle) {
        result += Math.pow(shape.length, 2); // Calcul aire triangle
      }
    }

    return result;
  }
}

class SumConsoleOutputter {
  constructor(private readonly calculator: AreaCalculator) {}

  public output(): void {
    const sum = this.calculator.sum();
    console.log(`Somme des aires : ${sum}`);
  }
}

const calculator = new AreaCalculator([new Circle(5), new Square(4)]);
const outputter = new SumConsoleOutputter(calculator);

outputter.output(); // affiche la somme des aires

export default {};
