//  This file is part of Friendiqa
//  https://git.friendi.ca/lubuwest/Friendiqa
//  Copyright (C) 2017 Marco R. <thomasschmidt45@gmx.net>
//
//  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 3 of the License, or
//  (at your option) any later version.
//
//  In addition, as a special exception, the copyright holders give
//  permission to link the code of portions of this program with the
//  OpenSSL library under certain conditions as described in each
//  individual source file, and distribute linked combinations including
//  the two.
//
//  You must obey the GNU General Public License in all respects for all
//  of the code used other than OpenSSL. If you modify file(s) with this
//  exception, you may extend this exception to your version of the
//  file(s), but you are not obligated to do so. If you do not wish to do
//  so, delete this exception statement from your version. If you delete
//  this exception statement from all source files in the program, then
//  also delete it here.
//
//  This program is distributed in the hope that it will be useful,
//  but WITHOUT ANY WARRANTY; without even the implied warranty of
//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
//  GNU General Public License for more details.
//
//  You should have received a copy of the GNU General Public License
//  along with this program.  If not, see <http://www.gnu.org/licenses/>.


import QtQuick 2.0
import QtQuick.Controls 2.4
import "qrc:/js/helper.js" as Helperjs
import "qrc:/qml/genericqml"

Rectangle {
    id:contactList
    color: "white"
    property var contact:({})
    property string profileimagesource:contact.profile_image
   ListView {
          id: contactView
          x:mm
          y:9*mm
          width: contactList.width-4*mm
          height:contactList.height-10*mm
          clip: true
          spacing: 0
          header: contactHeader
          model: contactModel
          delegate: Newsitem{}
          }
    BusyIndicator{
         id: contactBusy
         anchors.centerIn:parent
         width:10*mm
         height: 10*mm
         running: true
       }

   Component {  id: contactHeader
       Rectangle{
           border.color: "#EEEEEE"
           border.width: 1
           color:"white"
           width:contactView.width
           height: profileImage.height+namelabel.height+detailtext.height+7*mm
           //height: wrapper.height
           property var createdAtDate: new Date(contact.created_at)
           property string connectUrl: (contact.network!=="dfrn")||(contact.isFriend!=0)?"":( "<a href='"+contact.url.replace("profile","dfrn_request") +"'>"+qsTr("Connect")+"</a><br>")

               Image {
                   id: profileImage
                   x:mm
                   y:mm
                   width: contactView.width/2
                   height:width
                   source:(contact.profile_image!="")? "file://"+contact.profile_image : contact.profile_image_url
                   onStatusChanged: if (profileImage.status == Image.Error) {source="qrc:/images/defaultcontact.jpg"}
                   Connections{
                       target:contactList
                       onProfileimagesourceChanged:profileImage.source=profileimagesource
                   }
               }
               Column{id:buttoncolumn
                   anchors.right: parent.right
                   anchors.rightMargin: mm
                   y: mm
                      spacing:4

                      MButton{
                          id:photobutton
                          height: 6*mm
                          width: 8*mm
                          text: "\uf03e" // "Photos"
                          //font.pixelSize: 3*mm
                          visible:(contact.network=="dfrn")
                          onClicked:{
                              rootstack.currentIndex=2;
                              bar.currentIndex=2;
                              fotostab.phototabstatus="Contact";

                              //fotostab.active=true;
                              fotoSignal(root.login,contact) ;
                              newsStack.pop();
                              }
                       }

                      MButton{
                          id:dmbutton
                          height: 6*mm
                          width: 8*mm
                          visible: (contact.following=="true")
                          text: "\uf040" //"DM"
                          //font.pixelSize: 3*mm
                          onClicked:{
                              rootstack.currentIndex=0;
                              newsSwipeview.currentIndex=2;
                              directmessageSignal(contact)
                          }
                      }

                      MButton{
                          id:eventbutton
                          visible:(contact.network=="dfrn")
                          height: 6*mm
                          width: 8*mm
                          text:"\uf073"
                          //font.pixelSize: 3*mm
                          onClicked:{
                              rootstack.currentIndex=3;
                              bar.currentIndex=3;
                              calendartab.calendartabstatus="Friend"
                              eventSignal(contact);
                              newsStack.pop()
                          }
                      }

                  }//Column end
               Label {
                   id: namelabel
                   x:mm
                   width: contactView.width-2*mm
                   height: implicitHeight
                   text:contact.name+" (@"+contact.screen_name+")"
                   wrapMode: Text.Wrap//elide:Text.ElideRight
                   color: "#303030"
                   font.pixelSize: 4*mm
                   anchors.top: profileImage.bottom
                   anchors.topMargin: mm
               }
              Text{
                  id:detailtext
                  anchors.top: namelabel.bottom
                  anchors.topMargin: 2*mm
                  x:mm
                  width: contactView.width-2*mm
                  height: implicitHeight
                  font.pixelSize: 2.5*mm
                  textFormat:Text.RichText
                  wrapMode: Text.Wrap
                  text:"<b>"+qsTr("Description")+": </b> "+contact.description+"<br> <b>"+qsTr("Location")+":</b> "+contact.location+"<br> <b>"+qsTr("Posts")+":</b> "+contact.statuses_count+
                          "<br> <b>"+qsTr("URL")+":</b> <a href='"+ contact.url+"'>"+contact.url+"</a><br>"+
                          connectUrl+ "<b>"+qsTr("Created at")+":</b> "+createdAtDate.toLocaleString(Qt.locale())
                  onLinkActivated: {
                    Qt.openUrlExternally(link)}
               }


               //}
           }

       }//Component end
    Connections{
        target:newstab
        onContactpostsChanged:{
            if (newstab.contactposts.length>0){profileimagesource=newstab.contactposts[0].user.profile_image_url_large}
            contactBusy.running=false;
            contactModel.clear();
            var currentTime= new Date();
            var msg = {'currentTime': currentTime, 'model': contactModel,'news':newstab.contactposts, 'options':globaloptions};
            contactWorker.sendMessage(msg)
        }
    }

    ListModel{id: contactModel}

    WorkerScript {
        id: contactWorker
        source: "qrc:/js/newsworker.js"
    }

    MButton {
            id: closeButton
            height: 6*mm
            width: 8*mm
            anchors.top: parent.top
            anchors.topMargin: 1*mm
            anchors.right: parent.right
            anchors.rightMargin: 1*mm
            text: "\uf057"
            //font.pixelSize: 3*mm
            onClicked: {
                newsStack.pop()
            }
    }
    Component.onCompleted: {
                    xhr.clearParams();
                    xhr.setLogin(login.username+":"+Qt.atob(login.password));
                    xhr.setUrl(login.server);
                    xhr.setApi("/api/statuses/user_timeline");
                    xhr.setParam("user_id",contact.id)
                    xhr.get();
    }
}