/*
    SPDX-FileCopyrightText: 2013 Marco Martin <mart@kde.org>
    SPDX-FileCopyrightText: 2014 Sebastian Kügler <sebas@kde.org>

    SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
*/

#ifndef KUSERPROXY_H
#define KUSERPROXY_H

#include <QObject>
#include <QUrl>

#include <KDirWatch>
#include <KUser>

/**
 * KUserProxy (exposed as KUser to the QML runtime) is an object allowing
 * read-only access to the user's name, os and version and the configured
 * user image. This object can be used to personalize user interfaces.
 *
 * Example usage:
 * @code
    import org.kde.coreaddons as KCoreAddons
    [...]

    Item {
        [...]
        KCoreAddons.KUser {
            id: kuser
        }

        Image {
            id: faceIcon
            source: kuser.faceIconUrl
            [...]
        }

        Text {
            text: kuser.fullName
            [...]
        }
    }
    @endcode

 * @short KUser provides read-only access to the user's personal information
 * @see KUser
 */
class KUserProxy : public QObject
{
    Q_OBJECT

    Q_PROPERTY(QString fullName READ fullName NOTIFY nameChanged)
    Q_PROPERTY(QString loginName READ loginName NOTIFY nameChanged)
    Q_PROPERTY(QUrl faceIconUrl READ faceIconUrl NOTIFY faceIconUrlChanged)
    Q_PROPERTY(QString os READ os CONSTANT)
    Q_PROPERTY(QString host READ host CONSTANT)

public:
    KUserProxy(QObject *parent = nullptr);
    ~KUserProxy() override;

    /**
     * @return the full name of the user
     * @see nameChanged
     */
    QString fullName() const;

    /**
     * @return the user's login name
     * @see nameChanged
     *
     */
    QString loginName() const;

    /**
     * @return the url of the user's configured image (including file:/)
     * @see faceIconUrlChanged
     */
    QUrl faceIconUrl() const;

    /**
     * @return pretty name indicating operating system and version
     * @see nameChanged
     */
    QString os();

    /**
     * @return the system's hostname
     * @see nameChanged
     */
    QString host() const;

Q_SIGNALS:
    /**
     * signal that the user's name or login name changed
     * @see fullName
     * @see loginName
     */
    void nameChanged();
    /**
     * signal that the user image changed
     * @see faceIconUrl
     */
    void faceIconUrlChanged();

private:
    void update(const QString &path);
    KDirWatch m_dirWatch;
    KUser m_user;
    QString m_os;
    bool m_temporaryEmptyFaceIconPath;
};

#endif // KUSERPROXY_H