public ChildAreaListBuilder(IAreasReader areasReader, string parentAreaCode, int childAreaTypeId)
        {
            IArea area = AreaFactory.NewArea(areasReader, parentAreaCode);

            var categoryArea = area as CategoryArea;
            if (categoryArea != null)
            {
                ChildAreas =
                    new ChildAreaListForCategoryAreaBuilder(areasReader, categoryArea, childAreaTypeId)
                    .ChildAreas
                    .ToList();
            }
            else if (Area.IsNearestNeighbour(parentAreaCode))
            {
                // TODO: this should be replaced by CreateAreaListFromNearestNeighbourAreaCode

                var nearestNeighbourArea = new NearestNeighbourArea(parentAreaCode);
                var nearestNeighbours = areasReader.GetNearestNeighbours(nearestNeighbourArea.AreaCodeOfAreaWithNeighbours, nearestNeighbourArea.NeighbourTypeId);
                var nearestNeighboursAreas = nearestNeighbours.Select(x => x.NeighbourAreaCode).ToList();
                var areas = areasReader.GetAreasFromCodes(nearestNeighboursAreas);
                ChildAreas = areas.Cast<IArea>().ToList();
            }
            else
            {
                var areas = area.IsCountry
                    ? areasReader.GetAreasByAreaTypeId(childAreaTypeId)
                    : areasReader.GetChildAreas(parentAreaCode, childAreaTypeId);

                ChildAreas = areas.Cast<IArea>().ToList();
            }
        }
        public NearestNeighbourAreaListBuilder(IAreasReader areasReader, NearestNeighbourArea nearestNeighbourArea)
        {
            var areaCodes = nearestNeighbourArea.NeighbourAreaCodes;

            IList<string> newAreaCodes = new List<string>();

            // add the selected area to the list of neighbours 
            // it should always be on zeroth index
            newAreaCodes.Add(nearestNeighbourArea.AreaCodeOfAreaWithNeighbours);

            foreach (var areaCode in areaCodes)
            {
                newAreaCodes.Add(areaCode);
            }

            var areas = areasReader.GetAreasFromCodes(newAreaCodes);
            Areas = areas.Cast<IArea>().ToList();
        }