/***************************************************************************
                          internetradiostation.cpp  -  description
                             -------------------
    begin                : Sat March 29 2003
    copyright            : (C) 2003 by Klas Kalass
    email                : klas@kde.org
 ***************************************************************************/

/***************************************************************************
 *                                                                         *
 *   This program is free software; you can redistribute it and/or modify  *
 *   it under the terms of the GNU General Public License as published by  *
 *   the Free Software Foundation; either version 2 of the License, or     *
 *   (at your option) any later version.                                   *
 *                                                                         *
 ***************************************************************************/

#include "include/internetradiostation.h"
#include <typeinfo>
#include "include/radiostation-config.h"

/////////////////////////////////////////////////////////////////////////////

const char *StationUrlElement = "url";

static InternetRadioStation  emptyInternetRadioStation(registerStationClass);

/////////////////////////////////////////////////////////////////////////////

InternetRadioStation::InternetRadioStation()
    : RadioStation(),
      m_url()
{
}

InternetRadioStation::InternetRadioStation(const KURL &url)
    : RadioStation(),
      m_url(url)
{
}

InternetRadioStation::InternetRadioStation(const TQString &name,
                                           const TQString &shortName,
                                           const KURL &url)
    : RadioStation(name, shortName),
      m_url(url)
{
}

InternetRadioStation::InternetRadioStation(const InternetRadioStation &s)
    : RadioStation(s),
      m_url(s.m_url)
{
}


InternetRadioStation::InternetRadioStation(RegisterStationClass, const TQString &classname)
    : RadioStation(registerStationClass, !classname.isNull() ? classname : getClassName()),
      m_url()
{
}


/** returns an exact copy of this station*/
RadioStation *InternetRadioStation::copy() const
{
    return new InternetRadioStation(*this);
}

RadioStation *InternetRadioStation::copyNewID() const
{
    RadioStation *x = new InternetRadioStation(*this);
    x->generateNewStationID();
    return x;
}

InternetRadioStation::~InternetRadioStation()
{
}


/*  = 0 : this.url = s.url
    > 0 : this.url > s.url
    < 0 : this.url < s.url
    other class than FrequencyRadioStation: compare typeid(.).name()
*/
int InternetRadioStation::compare(const RadioStation &_s) const
{
    InternetRadioStation const *s = dynamic_cast<InternetRadioStation const*>(&_s);

    if (!s)
        return (typeid(this).name() > typeid(&_s).name()) ? 1 : -1;

    TQString thisurl = m_url.url(-1);    // -1: remove trailing '/'
    TQString thaturl = s->m_url.url(-1);

    // empty urls are never identical
    if (thisurl.length () == 0)
        return -1;
    if (thaturl.length() == 0)
        return 1;

    return thisurl.compare(thaturl);
}



bool InternetRadioStation::isValid() const
{
    // TODO: maybe we need to do more to validate this...
    return !m_url.isEmpty();
}

TQString InternetRadioStation::longName() const
{
    TQString longN = name();
    if (!longN.isEmpty()) {
        longN = i18n("%1, %2").arg(longN).arg(description());
    } else {
        longN = description();
    }

    return longN;
}


TQString InternetRadioStation::description() const
{
    return m_url.url();
}


bool InternetRadioStation::setProperty(const TQString &pn, const TQString &val)
{
    bool retval = false;
    if (pn == StationUrlElement) {
        m_url = val;
        retval = true;
    } else {
        retval = RadioStation::setProperty(pn, val);
    }
    return retval;
}

TQString InternetRadioStation::getProperty(const TQString &pn) const
{
    if (pn == StationUrlElement) {
        return m_url.url();
    } else {
        return RadioStation::getProperty(pn);
    }
}

TQStringList InternetRadioStation::getPropertyNames() const
{
    TQStringList l = RadioStation::getPropertyNames();
    l.push_back(StationUrlElement);
    return l;
}


RadioStationConfig *InternetRadioStation::createEditor() const
{
    return new UndefinedRadioStationConfig(NULL);
}

bool InternetRadioStation::operator == (const RadioStation &x) const
{
    if (!RadioStation::operator == (x))
        return false;

    InternetRadioStation const *fx = dynamic_cast<InternetRadioStation const*>(&x);
    if (!fx)
        return false;
    return m_url == fx->m_url;
}