﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace OfficeOpenXml.Utils
{
    internal class UriHelper
    {
        internal static Uri ResolvePartUri(Uri sourceUri, Uri targetUri)
        {
           if(targetUri.OriginalString.StartsWith("/"))
            {
                return targetUri;
            }
            string[] source = sourceUri.OriginalString.Split('/');
            string[] target = targetUri.OriginalString.Split('/');

            int t = target.Length - 1;
            int s;
            if(sourceUri.OriginalString.EndsWith("/")) //is the source a directory?
            {
                s = source.Length-1;
            }
            else
            {
                s=source.Length-2;
            }

            string file = target[t--];

            while (t >= 0)
            {
                if (target[t] == ".")
                {
                    break;
                }
                else if (target[t] == "..")
                {
                    s--;
                    t--;
                }
                else
                {
                    file = target[t--] + "/" + file;
                }
            }
            if (s >= 0)
            {
                for(int i=s;i>=0;i--)
                {
                    file = source[i] + "/" + file;
                }
            }
            return new Uri(file,UriKind.RelativeOrAbsolute);
        }

        internal static Uri GetRelativeUri(Uri WorksheetUri, Uri uri)
        {
            string[] source = WorksheetUri.OriginalString.Split('/');
            string[] target = uri.OriginalString.Split('/');

            int slen;
            if (WorksheetUri.OriginalString.EndsWith("/"))
            {
                slen = source.Length;
            }
            else
            {
                slen = source.Length-1;
            }
            int i = 0;
            while (i < slen && i < target.Length && source[i] == target[i])
            {
                i++;
            }

            string dirUp="";
            for (int s = i; s < slen; s++)
            {
                dirUp += "../";
            }
            string file = "";
            for (int t = i; t < target.Length; t++)
            {                
                file += (file==""?"":"/") + target[t];
            }
            return new Uri(dirUp+file,UriKind.Relative);
        }
    }
}
