import QtQuick 2.0
import QtQuick.Controls 1.4
import QtQuick.Controls.Styles 1.4
import "qrc:/js/news.js" as Newsjs
import "qrc:/js/helper.js" as Helperjs


Item {
    id: newsitem
    width: parent.width
    height:toprow.height+friendicaActivities.height+controlrow.height+1//Math.max((itemMessage.height+topFlow.height+friendicaActivities.height+4*mm),profileImage.height+user_name.height+mm)

    property string attending: ""
    property int itemindex: index
    onAttendingChanged: {attendLabel.visible=true;
            attendLabel.text= qsTr("attending: ")+ qsTr(attending)}

    signal replyto(string parent_id)

    function showActivityContacts(contacts){
        var component = Qt.createComponent("qrc:/qml/newsqml/FriendicaActivities.qml");
        var imagedialog = component.createObject(friendicaActivities,{"activitymembers": contacts});
    }
    Rectangle{width:newsitem.width; height: 1; anchors.bottom: newsitem.bottom; color:"light grey"}

    Rectangle{
    width:newsitem.width
    height:newsitem.height-1
    color:  (newsitemobject.messagetype==1)?"#ffe6e6" : "white"

    Row{id:toprow
        Column {
        id: authorcolumn
        width: 8*mm

        Image {
            id:profileImage
            source: (newsitemobject.user.profile_image!="")? "file://"+newsitemobject.user.profile_image : newsitemobject.user.profile_image_url
            x:1
            width: 7*mm
            height: 7*mm
            MouseArea{
                anchors.fill: parent
                onClicked:{showContact(newsitemobject.user)}
            }
            onStatusChanged: if (profileImage.status == Image.Error) {print("Image Failed "+"file://"+newsitemobject.user.profile_image);source="qrc:/images/defaultcontact.jpg"}
        }
        Label {
            id:user_name
            color: "grey"
            width:parent.width
            font.pixelSize: 1.5*mm
            wrapMode: Text.WrapAtWordBoundaryOrAnywhere
            text: Qt.atob(newsitemobject.user.name)+forumname
        }
    }
    Column {
        id:newscolumn
        width: newsitem.width-8*mm

        Flow{
            id:topFlow
            spacing: mm
            width:parent.width
            Label {
                id:messageTypeLabel
                color: "grey"
                text: if (newsitemobject.messagetype==0){qsTr("Source: ")+newsitemobject.source
                      } else if (newsitemobject.messagetype==1){ qsTr("Direct Message")} else {" Notification"}
                font.pixelSize: 1.5*mm
            }
            Label {
                id:createdAtLabel
                color: "grey"
                font.pixelSize: 1.5*mm
                horizontalAlignment: Label.AlignRight
                text: dateDiff
            }
            Label {
                id:replytoLabel
                color: "grey"
                font.pixelSize: 1.5*mm
                horizontalAlignment: Label.AlignRight
                text:   try {qsTr("In reply to ")+newsitemobject.reply_user.screen_name
                      }catch(e){" "}
                }

            Label {
                id:newscountLabel
                visible:((newstabstatus=="Conversations")&&(newsitemobject.newscount>1))?true:false
                color: "grey"
                height:3.5*mm
                font.pixelSize: 1.5*mm
                font.bold: true
                horizontalAlignment: Label.AlignRight
                text:   try {(newsitemobject.newscount-1)+qsTr(" comments") }catch(e){" "}
                MouseArea{
                    anchors.fill:parent
                    onClicked: {
                        conversationsymbol.color="black";
                        newsView.contentY+=newsitem.height;
                        var component = Qt.createComponent("qrc:/qml/newsqml/Conversation.qml");
                        var conversationItem = component.createObject(friendicaActivities,{"news":newsitemobject.chatArray});
                        showConversation(index,newsitemobject);
                    }
                }
            }
        }

        Text {
            color: "#404040"
            linkColor: "light green"
            id: itemMessage
            textFormat: Text.RichText
            text:Qt.atob(newsitemobject.statusnet_html)
            width: newsitem.width-8*mm-2
            height: implicitHeight
            wrapMode: Text.Wrap
            onLinkActivated:{ 
               Qt.openUrlExternally(link)}
            Component.onCompleted:{
                if (newsitemobject.attachmentList.length>0){
                    for(var attachments in newsitemobject.attachmentList){//   (newsitemobject.attachmentList[attachments].url);
                        var attachcomponent = Qt.createQmlObject('import QtQuick 2.0; '+
                        'AnimatedImage {id:gif;source: "'+newsitemobject.attachmentList[attachments].url+
                        '";onStatusChanged: playing = (status == AnimatedImage.Ready)}',
                        friendicaActivities,"Attachment"+attachments);
                     }
                }
            }
        }
    }
    }
    Flow{
       id:friendicaActivities
       anchors.top:toprow.bottom
       width:parent.width
       spacing:mm

       Label{color: "grey"
             height:3.5*mm
             font.pixelSize: 1.5*mm
             text: friendica_activities.likeText
             MouseArea{
                 anchors.fill: parent
                 onClicked: { showActivityContacts(newsitemobject.like)}
             }
       }
       Label{color: "grey"
             height:3.5*mm
             font.pixelSize: 1.5*mm
             text: friendica_activities.dislikeText
             MouseArea{
                 anchors.fill: parent
                 onClicked: { showActivityContacts(newsitemobject.dislike)}
             }
       }
       Label{color: "grey"
             height:3.5*mm
             font.pixelSize: 1.5*mm
             text: friendica_activities.attendyesText
             MouseArea{
                 anchors.fill: parent
                 onClicked: { showActivityContacts(newsitemobject.attendyes)}
             }}
       Label{color: "grey"
             height:3.5*mm
             font.pixelSize: 1.5*mm
             text: friendica_activities.attendnoText
             MouseArea{
                 anchors.fill: parent
                 onClicked: { showActivityContacts(newsitemobject.attendno)}
             }
       }
       Label{color: "grey"
             height:3.5*mm
             font.pixelSize: 1.5*mm
             text: friendica_activities.attendmaybeText
             MouseArea{
                 anchors.fill: parent
                 onClicked: { showActivityContacts(newsitemobject.attendmaybe)}
             }
       }
       Label{
           id:attendLabel
           color: "grey"
           height:3.5*mm
           font.pixelSize: 1.5*mm
           horizontalAlignment: Label.AlignRight
           text: (friendica_activities.self.attending)?(qsTr("Attending: ")+ qsTr(friendica_activities.self.attending)):""
       }
   }
   Row{id:controlrow
       anchors.top:friendicaActivities.bottom

       CheckBox{
           id:likeCheckbox
           width:10*mm
           visible: (newsitemobject.messagetype==0)? true:false
           checked:(friendica_activities.self.liked==1)?true:false
           style: CheckBoxStyle {
                indicator: Rectangle{
                    implicitWidth: 10*mm
                    implicitHeight:3*mm
                    Text{
                        anchors.centerIn: parent
                        font.pixelSize: 2.5*mm
                        font.family:fontAwesome.name
                        color:control.checked?"black": "grey"
                        text:"\uf118"
                    }
                }
           }
           onClicked: {
            if(likeCheckbox.checked==true){Newsjs.like(root.login,root.db,1,"like",newsitemobject.status_id,root);dislikeCheckbox.checked=false; model.friendica_activities.self.liked=0 }
            else{Newsjs.like(root.login,root.db,0,"like",newsitemobject.status_id,root); model.friendica_activities.self.liked=1}}
           }
       CheckBox{
           id: dislikeCheckbox
           width:10*mm
           visible: (newsitemobject.messagetype==0)? true:false
           checked: (friendica_activities.self.disliked==1)?true:false
           style: CheckBoxStyle {
            indicator: Rectangle{
                implicitWidth: 10*mm
                implicitHeight:3*mm
                Text{
                    anchors.centerIn: parent
                    font.pixelSize: 2.5*mm
                    font.family:fontAwesome.name
                    color:control.checked?"black": "grey"
                    text:  "\uf119"
                    }
                }
           }
           onClicked: {
            if (dislikeCheckbox.checked==true){Newsjs.like(root.login,root.db,1,"dislike",newsitemobject.status_id,root);likeCheckbox.checked=false; model.friendica_activities.self.disliked=0}
            else {Newsjs.like(root.login,root.db,0,"dislike",newsitemobject.status_id,root); model.friendica_activities.self.disliked=1}}
           }

       CheckBox {
           id:favoritedCheckbox
           visible:(newsitemobject.messagetype==0)
           width: 10*mm
           style: CheckBoxStyle {
               indicator:Rectangle{
                   x:4*mm
                   width: 3*mm
                   implicitHeight:4*mm
                    Text{
                        color: control.checked?"black":"grey"
                        font.pixelSize: 2.5*mm
                        text:"\uf005"
                        }
               }
           }
           checked:(newsitemobject.favorited>0)
           onClicked:{
               if(favoritedCheckbox.checkedState==Qt.Checked){
                   Newsjs.favorite(login,true,newsitemobject.status_id,root); model.newsitemobject.favorited=1}
               else if(favoritedCheckbox.checkedState==Qt.Unchecked){
                   Newsjs.favorite(login,false,newsitemobject.status_id,root);model.newsitemobject.favorited=0}
           }
       }
       Rectangle{
            width: 10*mm
            height: 4*mm
            color:"transparent"
            Text{
                id:newsmenusymbol
                color: "grey"
                anchors.centerIn: parent
                font.pixelSize: 2*mm
                font.bold: true
                text: "\u22EE"
            }
            MouseArea{
                anchors.fill:parent
                onClicked: {newsmenu.popup()}}
            }
       Rectangle{
            width: 10*mm
            height: 4*mm
            visible:newstab.newstabstatus!="Conversation"
            color:"transparent"
            Text{
                id:conversationsymbol
                color: "grey"
                anchors.centerIn: parent
                font.pixelSize: 2.5*mm
                font.family: fontAwesome.name
                text: "\uf086"
            }
            MouseArea{
                anchors.fill:parent
                onClicked:{
                    conversationsymbol.color="black";
                    
                    //Newsjs.conversationfromdb(db,login.username,newsitemobject.conversation_id,function(conversation){
                    var component = Qt.createComponent("qrc:/qml/newsqml/Conversation.qml");
                   // var conversationItem = component.createObject(friendicaActivities,{"news":newsitemobject.chatArray});
                 var conversationItem = component.createObject(friendicaActivities);   showConversation(index,newsitemobject)
                }
            }
        }

    }

    Menu {
        id:newsmenu
        MenuItem {
            text: qsTr("Reply")
            onTriggered: {
                var directmessage=0;
                if (newsitemobject.messagetype==1){ directmessage=1}
                newsStack.push({item:"qrc:/qml/newsqml/MessageSend.qml",properties:{"reply_to_user": newsitemobject.user.screen_name,"parentId":newsitemobject.status_id,"login":root.login,"directmessage":directmessage}});
            }
        }
        MenuItem {
            text: qsTr("DM")
            onTriggered: {
                root.directmessageSignal(newsitemobject.user.screen_name);
            }
        }
        MenuItem {
            text: qsTr("Repost")
            onTriggered: {
                Newsjs.retweetNews(root.login,db,newsitemobject.status_id,root,function(reply){
                    print(reply)})
            }
        }
        MenuItem {
            text: qsTr("Conversation")
            onTriggered: {
                conversationsymbol.color="black";
                //Newsjs.conversationfromdb(db,login.username,newsitemobject.conversation_id,function(conversation){
                var component = Qt.createComponent("qrc:/qml/newsqml/Conversation.qml");
                var conversationItem = component.createObject(friendicaActivities,{"news":newsitemobject.chatArray});
                showConversation(index,newsitemobject)
            }
        }

        Menu{
            title: qsTr("Attending")
            MenuItem{
                text:qsTr("yes")
                onTriggered: {Newsjs.attend(root.login,db,"yes",newsitemobject.status_id,root,function(){
                    model.friendica_activities.self.attending="yes";attending="yes"})
                }
            }
            MenuItem{text:qsTr("maybe")
                onTriggered: {Newsjs.attend(root.login,db,"maybe",newsitemobject.status_id,root,function(){
                    model.friendica_activities.self.attending="maybe";attending="maybe"})
                }
            }
            MenuItem{text:qsTr("no")
                onTriggered: {Newsjs.attend(root.login,db,"no",newsitemobject.status_id,root,function(){
                model.friendica_activities.self.attending="no";attending="no"})}
            }
        }

        MenuItem {
            text: qsTr("Delete")
            onTriggered: {
                Newsjs.deleteNews(root.login,root.db,newsitemobject.status_id,newsitemobject.messagetype,root,function(reply){
                   // newsModel.remove(index)
                   var msg = {'deleteId': index, 'model': newsModel};
                newsWorker.sendMessage(msg);
                })
            }
        }
        //MenuItem{
        //    text:qsTr("Show on website")
        //    onTriggered:Qt.openUrlExternally(login.server+"/display/"+newsitemobject
        //}
    }
}}