package cz.muni.fi.rtc.teacherWorkbench.demo;

import java.util.HashSet;
import java.util.Set;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import com.ibm.icu.util.Calendar;

import cz.muni.fi.rtc.teacherWorkbench.importer.ImporterConfigurationImpl;
import cz.muni.fi.rtc.teacherWorkbench.importer.Mailer;
import cz.muni.fi.rtc.teacherWorkbench.importer.PasswordGenerator;
import cz.muni.fi.rtc.teacherWorkbench.importer.PeopleImporter;
import cz.muni.fi.rtc.teacherWorkbench.importer.ProjectImporter;
import cz.muni.fi.rtc.teacherWorkbench.importer.exceptions.ImporterException;
import cz.muni.fi.rtc.teacherWorkbench.model.ImportedPerson;
import cz.muni.fi.rtc.teacherWorkbench.model.ImportedPersonImpl;
import cz.muni.fi.rtc.teacherWorkbench.model.Project;
import cz.muni.fi.rtc.teacherWorkbench.model.ProjectImpl;

/**
 * Example of the usage of the Teacher Workbench API
 * @author Jan Stastny
 *
 */
public class Demo {

	private static Log log = LogFactory.getLog(Demo.class);
	
	private static ImporterConfigurationImpl conf;
	
	private static PeopleImporter importer;
	
//	private static ImportedPersonImpl person;
	
	private static Set people = new HashSet();
	
	private static Set projects = new HashSet();
	
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		conf = new ImporterConfigurationImpl();
		conf.setLdapServer("localhost");
		conf.setLdapPort(10389);
		conf.setLdapAdminDN("uid=admin,ou=system");
		conf.setLdapBaseDN("o=localhost");
		conf.setLdapAdminPassword("secret");
		conf.setLdapGroupJazzUsers("cn=JazzUsers,ou=JazzGroups,o=localhost");
		conf.setLdapGroupPeople("ou=people,o=localhost");
		
		conf.setSmtpHost("localhost");
		conf.setEmailFromAddress("root@localhost");
		
//		Working gmail configuration
//		conf.setSmtpHost("smtp.gmail.com");
//		conf.setSmtpTls(true);
//		conf.setSmtpPort(587);
//		conf.setSmtpUser("honza.stastny@gmail.com");
//		conf.setSmtpPassword("password");
//		conf.setEmailFromAddress("honza.stastny@gmail.com");
		
		conf.setRtcAddress("https://localhost:9443/jazz");
		conf.setRtcAdminUser("jstastny");
		conf.setRtcAdminPassword("jstastny");
		
				
		try {
			importer = new PeopleImporter(conf);
		} catch (ImporterException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		long timestamp = Calendar.getInstance().getTimeInMillis();
		
		ImportedPersonImpl person = new ImportedPersonImpl();
		person.setFirstName(timestamp + "Krestni");
		person.setLastName("Prijmeni");
		person.setUID("java-test-" + timestamp);
		person.setRawPassword("ahoj");
		person.setDescription("Java test user");
		person.setEmailAddress("honza@localhost");
		
		people.add(person);

		PasswordGenerator.generatePasswordsForPeople(people);
		
		
		ImportedPersonImpl teacher = new ImportedPersonImpl();
		teacher.setUID("jstastny");
		
		

		
		
		addPerson();
		sendMail();
		
		ProjectImpl pr = new ProjectImpl();
		pr.setName("Java test Project " + timestamp);
		pr.setSummary("Project summary");
		pr.setDescription("");
		pr.setProcessTemplate("cz.muni.fi.pa165.imported.v4");
		pr.setMembers(people);
		
		// Add teacher
		pr.getMembers().add(teacher);
		pr.addRootMember(teacher);
		pr.addRoleOfUser(teacher, "vyucujici_PA165");
		
		//Map> roles = new HashMap>();
		pr.addRoleOfUser(person, "student_PA165");
		
		projects.add(pr);
		
		createProjects();
		
		
	}
	
	private static void createProjects() {
		try {
			ProjectImporter prIm = new ProjectImporter(conf);
			prIm.importProjects(projects);
		} catch (ImporterException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}
	
	
	private static void addPerson() {
		
		//Set people = new HashSet();
		
		
		
		//people.add(person);
		
		try {
			importer.importUsers(people);
		} catch (ImporterException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}
	
	private static void sendMail() {
		
		String subject = "Email about %%RTCADDRESS%%";
		String body = "Your information (%%UID%%): \n\n" +
				"UID: %%UID%%\n" +
				"First: %%FIRST%%\n" +
				"Last: %%LAST%%\n" +
				"Email: %%EMAIL%%\n" +
				"Password: %%PASS%%\n" +
				"\nZdravime. Admini řčžčřžíoěáýščáířžýšěčq";
		
		try {
			Mailer mailer = new Mailer(conf);
			mailer.sendEmailAnnouncement(subject, body, people);
		} catch (ImporterException e) {
			e.printStackTrace();
		}
	}
	
	

}