//  This file is part of Friendiqa
//  https://github.com/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.11
import "qrc:/js/service.js" as Service
import "qrc:/js/helper.js" as Helperjs
import "qrc:/qml/genericqml"

Rectangle{
    id:permissionDialog
//    x: mm
    width: parent.width-5*mm
    height:root.height/3
    function updatePerms(){
        for (var i=0;i<groupModel.count;i++)
        {if (groupModel.get(i).groupstatus=="positive"){
             group_allow.push(groupModel.get(i).group.gid)
             }
         if (groupModel.get(i).groupstatus=="negative"){
             group_deny.push(groupModel.get(i).group.gid)
             }
         }
        for (var j=0;j<contactModel.count;j++){
         if (contactModel.get(j).contactstatus=="positive"){
             contact_allow.push(contactModel.get(j).contact.cid)
             }
         if (contactModel.get(j).contactstatus=="negative"){
             contact_deny.push(contactModel.get(j).contact.cid)
             }
             if ((contact_allow.length==0)&&(contact_deny.length==0)&&(group_allow.length==0)&&(group_deny.length==0))
             {permButton.text="\uf09c"}
             else{permButton.text="\uf023"}
         }}

    Text{
         x:0.5*mm
         y:0.5*mm
         text: qsTr("Friends")
    }
    ListView {
          id: contactView
          x:0.5*mm
          y:5.5*mm
          width: permissionDialog.width/2-2*mm
          height: permissionDialog.height-14*mm
          clip: true
          spacing: 1
          model: contactModel
          delegate: contactItem
     }

     ListModel{id: contactModel}
     Component{
         id:contactItem
         Rectangle{
             id:contactitemRect
             width:contactView.width
             height: 5*mm
             radius: 0.5*mm
             property string contactstatus
             onContactstatusChanged:{
                 if(contactstatus=="positive"){contactitemRect.color="light green"}
                   else if (contactstatus=="negative"){contactitemRect.color= "ffe6e6"}
                   else{contactitemRect.color= "white"}}
             color: "white"
             border.color:"grey"
             Text{
               color:"grey"
               text:contact.screen_name
               }
            MouseArea{
                anchors.fill: parent
                onClicked:{
                    if(contactModel.get(index).contactstatus=="neutral"){
                        contactModel.set(index,{"contactstatus":"positive"});
                        contactstatus="positive"
                    }
                    else if (contactModel.get(index).contactstatus=="positive"){
                        contactModel.set(index,{"contactstatus":"negative"})
                        contactstatus="negative"
                    }
                    else{contactModel.set(index,{"contactstatus":"neutral"});
                        contactstatus="neutral";
                    }
             }}
          Component.onCompleted:{
                    if (contactModel.get(index).contactstatus=="positive"){
                  contactstatus="positive"
              }
              else if (contactModel.get(index).contactstatus=="negative"){
                  contactstatus="negative"
              }
               else {contactstatus="neutral"}  }
          }
      }
     Text{
         x:contactView.width+2*mm
         y:0.5*mm
         text: qsTr("Groups")
    }
    ListView {
          id: groupView
          x:contactView.width+2*mm
          y:5.5*mm
          width: permissionDialog.width/2-2*mm
          height: permissionDialog.height-14*mm
          clip: true
          spacing: 1
          model: groupModel
          delegate: groupItem
     }

     ListModel{id: groupModel}
     Component{
          id:groupItem
          Rectangle{
             id:groupitemRect
             width:groupView.width
             radius: 0.5*mm
             height: 5*mm
             property string groupstatus:"neutral"
             onGroupstatusChanged:
                {if(groupstatus=="positive"){groupitemRect.color="light green"}
                 else if (groupstatus=="negative"){groupitemRect.color= "#ffe6e6"}
                 else{groupitemRect.color= "white"}}
             color: "white"
             border.color:"grey"
              Text{
                  color:"grey"
                  text:group.groupname
                   }
               MouseArea{
                anchors.fill: parent
                onClicked:{
                    if(groupModel.get(index).groupstatus=="neutral"){
                        groupModel.set(index,{"groupstatus":"positive"});
                        groupstatus="positive"}
                    else if (groupModel.get(index).groupstatus=="positive"){
                        groupModel.set(index,{"groupstatus":"negative"});
                        groupstatus="negative"}
                   else{groupModel.set(index,{"groupstatus":"neutral"})
                    groupstatus="neutral"}
                }}
             Component.onCompleted:{ if (groupModel.get(index).groupstatus=="positive"){
                  groupstatus="positive"
              }
              else if (groupModel.get(index).groupstatus=="negative"){
                  groupstatus="negative"
              }
               else {groupstatus="neutral"}  }
              }
      }
      MButton{
         x:0.5*mm
         anchors.bottom: parent.bottom
         anchors.bottomMargin:1
         text:"\uf0c7"
         onClicked:{
            updatePerms();
            var perms=[];
            perms.push(contact_allow,contact_deny,group_allow,group_deny);
            Service.savePermissions(db,perms)
                   }
      }
      MButton{
         x:contactView.width+2*mm
         anchors.bottom: parent.bottom
         anchors.bottomMargin:1
         text:"\u2713"
         onClicked:{updatePerms();
                    permissionDialog.visible=false;
                    }
        }

     Component.onCompleted:{
         Helperjs.readData(db,"contacts",login.username,function(contacts){
            for (var name in contacts){
               var contactstatus="neutral";
               if (contact_allow.indexOf(contacts[name].cid)>-1){contactstatus="positive"}
               else if (contact_deny.indexOf(contacts[name].cid)>-1){contactstatus="negative"}
               contactModel.append({"contact":contacts[name],"contactstatus":contactstatus})
         }},"isFriend",1);

         Helperjs.readData(db,"groups",login.username,function(owngroups){
            for (var number in owngroups){
                  var groupstatus= "neutral";
                  if (group_allow.indexOf(owngroups[number].gid)>-1){groupstatus="positive"}
                  else if (group_deny.indexOf(owngroups[number].gid)>-1){groupstatus="negative"}
                   groupModel.append({"group":owngroups[number],"groupstatus":groupstatus})
         }});
      }
}