package logic;

import model.User;

import javax.servlet.http.Cookie;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Arrays;
import java.util.logging.Level;

/**
 * @author Andréa
 * @version 1.0 25/03/11
 */
public class CookieManager {
    private static final java.util.logging.Logger logger =
            java.util.logging.Logger.getLogger(CookieManager.class.getCanonicalName());

    private static final MessageDigest SHA1 = createInstance();

    private static final MessageDigest createInstance() {
        try {
            return MessageDigest.getInstance("SHA1");
        } catch (NoSuchAlgorithmException e) {
            throw new Error(e);
        }
    }

    private static String bytesToHex(byte[] b) {
        char hexDigit[] = {'0', '1', '2', '3', '4', '5', '6', '7',
                '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'};
        StringBuffer buf = new StringBuffer();
        for (int j = 0; j < b.length; j++) {
            buf.append(hexDigit[(b[j] >> 4) & 0x0f]);
            buf.append(hexDigit[b[j] & 0x0f]);
        }
        return buf.toString();
    }

    public static Cookie createAutoConnexionCookie(User user) {
        //Introduce a little bit of security
        String message = user.getLogin();
        String cookieContent = SHA1Representation(message);
        logger.log(Level.INFO,"Message : {0}, Cookie Content : {1}", new Object[]{message, cookieContent});

        //Create the cookie
        Cookie autoConnexion = new Cookie("autoConnexionPrint", cookieContent);
        //stay alive for a day
        autoConnexion.setMaxAge(24 * 60 * 60);

        return autoConnexion;
    }

    public static String SHA1Representation(String message) {
        SHA1.update(message.getBytes());
       return bytesToHex(SHA1.digest());
    }

}
