package net.sourceforge.fenixedu.domain;

import net.sourceforge.fenixedu.domain.exceptions.DomainException;

import org.apache.commons.codec.digest.DigestUtils;

public class LoginRequest extends LoginRequest_Base {

    public LoginRequest(User user) {
        if (user.getLoginRequest() != null) {
            throw new DomainException("error.user.already.has.loginRequest");
        }

        setRootDomainObject(RootDomainObject.getInstance());
        super.setUser(user);
        super.setHash(generateHash());
    }

    public void delete() {
        super.setUser(null);
        removeRootDomainObject();
        super.deleteDomainObject();
    }

    private String generateHash() {
        String seed = System.currentTimeMillis() + " " + this.getUser().getIdInternal();
        return DigestUtils.md5Hex(seed);
    }

    @Override
    public void setHash(String hash) {
        throw new DomainException("error.cannot.change.hash");
    }

    @Override
    public void setUser(User user) {
        throw new DomainException("error.cannot.change.user");
    }

    public static LoginRequest getLoginRequestWithHash(String hash) {
        for (LoginRequest request : RootDomainObject.getInstance().getLoginRequests()) {
            if (request.getHash().equals(hash)) {
                return request;
            }
        }
        return null;
    }

}
