//
// AsfReferencePlaylistFormat.cs
//
// Author:
//   Félix Velasco <felix.velasco@gmail.com>
//
// Copyright (C) 2009 Félix Velasco
//
// Permission is hereby granted, free of charge, to any person obtaining
// a copy of this software and associated documentation files (the
// "Software"), to deal in the Software without restriction, including
// without limitation the rights to use, copy, modify, merge, publish,
// distribute, sublicense, and/or sell copies of the Software, and to
// permit persons to whom the Software is furnished to do so, subject to
// the following conditions:
//
// The above copyright notice and this permission notice shall be
// included in all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
//

using System;
using System.IO;
using System.Collections.Generic;

using Mono.Unix;

using Banshee.Base;
using Banshee.Sources;

namespace Banshee.Playlists.Formats
{
    public class AsfReferencePlaylistFormat : PlaylistFormatBase
    {
        public static readonly PlaylistFormatDescription FormatDescription = new PlaylistFormatDescription (
            typeof (AsfReferencePlaylistFormat), MagicHandler, Catalog.GetString ("Windows Media ASX"),
            "", new string [] {"video/x-ms-asx", "video/asx", "video/x-ms-asf"});

        public static bool MagicHandler (StreamReader reader)
        {
            try {
                return reader.ReadLine ().Equals ("[reference]", StringComparison.CurrentCultureIgnoreCase);
            } catch {
                return false;
            }
        }

        public AsfReferencePlaylistFormat ()
        {
        }

        public override void Load (StreamReader reader, bool validateHeader)
        {
            string line;
            Dictionary<string, object> element = AddElement ();

            while ((line = reader.ReadLine()) != null) {
                if (line.StartsWith ("ref01", StringComparison.CurrentCultureIgnoreCase) ||
                    line.StartsWith ("ref1", StringComparison.CurrentCultureIgnoreCase)) {
                    string uri_aux = line.Substring (line.IndexOf ("=") + 1).Trim ();

                    if (uri_aux.StartsWith ("http", StringComparison.CurrentCultureIgnoreCase))
                        uri_aux = "mmsh" + uri_aux.Substring (4);

                    element["uri"] = ResolveUri (uri_aux);
                    break;
                }
            }
        }

        public override void Save (Stream stream, ITrackModelSource source)
        {
            throw new NotImplementedException ();
        }
    }
}
