using System;
using System.Collections.Generic;
using System.Windows;
using System.Windows.Media;
using Machinations.FromFlash.graph;

namespace Machinations.UserComponents
{
    public interface IUserComponentInstance 
    {
        UserComponentGraph InternalGraph { get; }
        List<GraphElement> UnzippedElements { get; }
        Action InhibitedChanged { get; set; }
        string Name { get; set; }
        Point Position { get; set; }
        int Radius { get; set; }
        int CurrentCard { get; set; }
        bool Inhibited { get; set; }
        Color Color { get; set; }
        Action ComponentChanged { get; set; }
        IEnumerable<GraphElement> PresentedElements { get; }
        IEnumerable<OuterInOut> OuterInOuts { get; }
        int InstanceNumber { get; }
        UserComponentType Type { get; }
        event Action OnSelect;
        event Action OnUnselect;
        void UnZip();
        void AddLoadedOuterInOut(OuterInOut inOut);
        void Zip();
        IUserComponentSchema GetUcScheme();
        void Dispose();
        bool IsSimilar(IUserComponentInstance model);
        void UpdateOuters();
        bool IsZipped();
        void AppendToGraph(Graph graph);

    }
}