using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Reflection;
using Microsoft.Samples.Debugging.CorSymbolStore;
using System.Diagnostics.SymbolStore;
using System.IO;

namespace Cosmos.Debug.Common
{
	public class ReverseSourceInfos {
        private readonly SourceInfos mSourceInfos;
        public ReverseSourceInfos(SourceInfos aSourceInfos)
        {
            mSourceInfos = aSourceInfos;            
        }

        public bool FindAddressForSourceLocation(string documentName, uint aLine, uint aColumn, out uint aAddress)
        {
            aAddress = UInt32.MaxValue;
            foreach (var xItem in mSourceInfos)
            {
                if (!documentName.Equals(xItem.Value.SourceFile, StringComparison.InvariantCultureIgnoreCase))
                {
                    continue;
                }
                // todo: improve check to also consider column
                if (xItem.Value.Line == aLine)
                {
                    if (aAddress > xItem.Key)
                    {
                        aAddress = xItem.Key;
                    }
                }
            }
            return aAddress < UInt32.MaxValue;
        }
    }
}