using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;

namespace Assets.Common
{
    [Serializable]
    public class MapSite : IHasMetadata
    {
        public Metadata Metadata { get; } = new Metadata();

        public MapSite(Point center, IEnumerable<int> boundary)
        {
            Center = center;
            Boundary = boundary;
        }

        public int Index { get; internal set; }
        public Point Center { get; set; }
        public ISet<string> Tags { get; set; } = new HashSet<string> { CommonTags.Empty };
        public IEnumerable<int> Boundary { get; set; }
        public IEnumerable<(int, int)> Edges => Boundary.RotateRight().Zip(Boundary, (a, b) => (a, b));

        [field: NonSerialized]
        public Map Map { get; internal set; }
    }
}