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

namespace InABox.Core
{
    public interface ICoreRow
    {
        object? this[string columnName] { get; set; }

        int Index { get; }
        CoreTable Table { get; }
        List<object?> Values { get; }

        T Get<T>(string columnname, bool usedefault = true);
        TType Get<TSource, TType>(Expression<Func<TSource, TType>> expression, bool usedefault = true);
        void Set<T>(string columnname, T value);
        void Set<TSource, TType>(Expression<Func<TSource, TType>> expression, TType value);
        Dictionary<string, object?> ToDictionary(string[] exclude);
        BaseObject ToObject(Type t);
        T ToObject<T>() where T : BaseObject, new();
    }
}