package org.example.backend;

import java.io.Serializable;
import javax.annotation.PostConstruct;
import javax.enterprise.context.SessionScoped;
import javax.inject.Inject;
import org.apache.commons.lang3.StringUtils;
import org.apache.deltaspike.core.api.config.ConfigResolver;
import org.example.backend.service.InvoicerFacade;
import org.example.backend.service.ProductFacade;
import org.example.backend.service.UserFacade;

/**
 *
 * @author Matti Tahvonen
 */
@SessionScoped
public class UserSession implements Serializable {

    @Inject
    UserFacade userFacade;

    @Inject
    InvoicerFacade invoicerFacade;

    @Inject
    ProductFacade productFacade;

    private User user;

    @PostConstruct
    public void init() {
        final String propertyValue = ConfigResolver.getPropertyValue(
                "jpa-invoicer.gpluskey");
        // If no Google OAuth API key available, use fake login
        if (StringUtils.isEmpty(propertyValue)) {
            demoLogin();
        }
    }

    protected void demoLogin() {
        final String email = "[email protected]";
        this.user = userFacade.findByEmail(email);
        if (user == null) {
            this.user = userFacade.save(new User(email));

            Invoicer invoicer = new Invoicer();
            invoicer.setName("Matin pummpu ja imu");
            invoicer.setAddress("Ruukinkatu 4, 20100 Turku");
            invoicer.setBankAccount("FI1234567890");
            invoicer.setEmail("[email protected]");
            invoicer.setPhone("+34567890");
            invoicer.getAdministrators().add(this.user);
            this.user.getAdministrates().add(invoicer);
            invoicer = invoicerFacade.save(invoicer);
            Product product = new Product();
            product.setName("Pumppu");
            product.setPrice(30.0);
            product.setInvoicer(invoicer);
            productFacade.save(product);
            product = new Product();
            product.setName("Imuri");
            product.setPrice(60.0);
            product.setInvoicer(invoicer);
            productFacade.save(product);

        }
    }

    public User getUser() {
        return user;
    }

    public void setUser(User user) {
        this.user = user;
    }

    public boolean isLoggedIn() {
        return user != null;
    }

    public void login(String email, String displayName) {
        try {
            user = userFacade.findByEmail(email);
        } catch (Exception e) {
        }
        if (user == null) {
            userFacade.save(new User(email));
            user = userFacade.findByEmail(email);
        }
    }

}