Não terminei de implementar.. mas dei uma esboçada na idéia.. tenta terminar aí x)