/*
 * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
 * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
 */
package com.triz.util;

import com.triz.trizservice.modeles.ServiceFonctiongroupe;
import com.triz.trizservice.modeles.ServiceFonctionnaliter;
import com.triz.trizservice.modeles.ServiceMember;
import com.triz.trizservice.modeles.ServiceUser;
import com.triz.trizservice.service.TransactionService;
import java.util.ArrayList;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.stereotype.Component;

/**
 *
 * @author HP
 */
@Component("utilControleAccess")
@Scope("view")
public class UtilControleAccess {

    private String titre;
    private String userLabel;
    private ServiceUser userSelect;
    private List<ServiceFonctionnaliter> allFonctionByUser;
    List<ServiceMember> listMemberShip;

    @Autowired
    public UtilContext context;

    @Autowired
    private TransactionService service;

    public ServiceUser getCurrentUser() {

        ServiceUser user = (ServiceUser) SecurityContextHolder.getContext().getAuthentication().getPrincipal();
        if (user != null) {
            return service.getUserById(user.getUserid());
        }
        return null;
    }

    public String getUserLabel() {
        if (userSelect == null) {
            userSelect = context.getCurrentUser();
        }
        if (userSelect != null) {
            userLabel = userSelect.getPrenom() + " " + userSelect.getNom();
        } else {
            userLabel = null;
        }
        return userLabel;
    }

    public void permission() {
        if (userSelect == null) {
            userSelect = context.getCurrentUser();
        }
        if (userSelect != null) {
            userLabel = userSelect.getPrenom() + " " + userSelect.getNom();
        }

    }

    public boolean isshowPrivilegeAdd(String fonction1) {
        if (userSelect == null) {
            userSelect = context.getCurrentUser();
        }
        ServiceFonctiongroupe helpingFonctionGroupe = new ServiceFonctiongroupe();
        List<String> list = new ArrayList<>();
        listMemberShip = service.getAllMemberShipByUser(userSelect);

        for (ServiceMember member : listMemberShip) {
            helpingFonctionGroupe = service.getFonctionGroupByFonctionIdAndGoupe(fonction1, member.getFkGroupe());
            if (helpingFonctionGroupe != null) {
                list.add(helpingFonctionGroupe.getCanCreate());
            }
        }

        if (!list.isEmpty()) {
            if (list.contains("true")) {
                return true;
            } else {
                return false;
            }
        }

        return false;
    }

    public boolean isshowPrivilegeRemove(String fonction1) {

        if (userSelect == null) {
            userSelect = context.getCurrentUser();
        }
        ServiceFonctiongroupe helpingFonctionGroupe = new ServiceFonctiongroupe();
        List<String> list = new ArrayList<>();
        listMemberShip = service.getAllMemberShipByUser(userSelect);

        for (ServiceMember member : listMemberShip) {
            helpingFonctionGroupe = service.getFonctionGroupByFonctionIdAndGoupe(fonction1, member.getFkGroupe());
            if (helpingFonctionGroupe != null) {
                list.add(helpingFonctionGroupe.getCanDelete());
            }
        }

        if (!list.isEmpty()) {
            if (list.contains("true")) {
                return true;
            } else {
                return false;
            }
        }

        return false;
    }
    
    public boolean isshowPrivilegeUpdate(String fonction1) {
        System.out.println(" isshowPrivilegeUpdate(String fonction1): " + fonction1);
        if (userSelect == null) {
            userSelect = context.getCurrentUser();
        }
        
        ServiceFonctiongroupe helpingFonctionGroupe = new ServiceFonctiongroupe();
        List<String> list = new ArrayList<>();
        if (listMemberShip == null) {
            listMemberShip = service.getAllMemberShipByUser(userSelect);
        }

        for (ServiceMember member : listMemberShip) {
            helpingFonctionGroupe = service.getFonctionGroupByFonctionIdAndGoupe(fonction1, member.getFkGroupe());
            if (helpingFonctionGroupe != null) {
                list.add(helpingFonctionGroupe.getCanUpdate());
                System.out.println("helpingFonctionGroupe.getCanUpdate()  : " + helpingFonctionGroupe.getCanUpdate());
            }
        }
        System.out.println("helpingFonctionGroupe: " + helpingFonctionGroupe);
        System.out.println("list: " + list);
        if (!list.isEmpty()) {
            if (list.contains("true")) {
                return true;
            } else {
                return false;
            }
        }
        return false;
    }
    
     public boolean isshow1(String fonction1) {
       System.out.println(" isshowPrivilegeUpdate(String fonction1): " + fonction1);
        if (userSelect == null) {
            userSelect = context.getCurrentUser();
        }
        
        ServiceFonctiongroupe helpingFonctionGroupe = new ServiceFonctiongroupe();
        List<String> list = new ArrayList<>();
        if (listMemberShip == null) {
            listMemberShip = service.getAllMemberShipByUser(userSelect);
        }

        for (ServiceMember member : listMemberShip) {
            helpingFonctionGroupe = service.getFonctionGroupByFonctionIdAndGoupe(fonction1, member.getFkGroupe());
            if (helpingFonctionGroupe != null) {
                list.add("true");
                System.out.println("helpingFonctionGroupe.getCanUpdate()  : " + helpingFonctionGroupe.getCanUpdate());
            }
        }
        System.out.println("helpingFonctionGroupe: " + helpingFonctionGroupe);
        System.out.println("list: " + list);
        if (!list.isEmpty()) {
            if (list.contains("true")) {
                return true;
            } else {
                return false;
            }
        }
        return false;
    }
}
