import { Svg } from "react-native-svg";

import { Bar } from "./bar";
import { ScaleBandType, ScaleLinearType } from "./graph-types";
import { calculateBarWidth } from "./custom-bar-utils";

export interface CombinedData {
	data: { value: number }[];
	svg: { fill: string };
}

interface CustomBarsProps {
	x: ScaleBandType;
	y: ScaleLinearType;
	bandwidth: number;
	barColors: string[];
	xValues: unknown[]; // TODO: update this value when this data type is defined
	barData: CombinedData[];
	gap: number;
	roundedRadius: number;
}

export const CustomBars: React.FC<Partial<CustomBarsProps>> = ({
	x: scaleX,
	y: scaleY,
	bandwidth,
	barData,
	xValues,
	barColors,
	gap = 2,
	roundedRadius = 4,
}) => {
	const barWidth = calculateBarWidth(bandwidth, barData.length, gap);

	return xValues.map((_, index) => (
		<Svg key={`group-${index}`} testID={`svg-${index}`}>
			{barData.map((item, i) => (
				<Bar
					key={`bar-${i}-${index}`}
					scaleX={scaleX}
					scaleY={scaleY}
					data={item.data[index]}
					barNumber={i}
					index={index}
					fill={barColors[i]}
					barWidth={barWidth}
					gap={gap}
					roundedRadius={roundedRadius}
				/>
			))}
		</Svg>
	));
};
