package hu.procyon.atomizer;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import com.sun.syndication.feed.atom.Content;
import com.sun.syndication.feed.atom.Entry;
import com.sun.syndication.feed.atom.Feed;
import com.sun.syndication.feed.atom.Generator;
import com.sun.syndication.feed.atom.Link;
import com.sun.syndication.feed.atom.Person;
import com.sun.syndication.io.FeedException;
import com.sun.syndication.io.WireFeedOutput;

public class FeedGenerator {
	
	public String generate(List<Href> list, String id) {
		String result = null;
		Feed feed = new Feed();
		feed.setFeedType("atom_1.0");
		feed.setId(id);
		Person author = new Person();
		author.setName("Lukács Attila");
		List<Person> authors = new ArrayList<Person>();
		authors.add(author);
		feed.setAuthors(authors);
		Generator generator = new Generator();
		generator.setValue("Atomizer");
		generator.setVersion("1.0");
		feed.setGenerator(generator);
		Date date = new Date(1);
		Date nowDate = new Date();
		feed.setTitle("Music on " + id);
		feed.setEncoding("UTF-8");
		List<Entry> entries = new ArrayList<Entry>();
		for (Href href: list) {
			String hrefString = href.getHref().toString();
			String typeString = href.getMimeType();
			String anchorString = href.getAnchor();
			Date lastMod = href.getLastModified();
			if (typeString == null) {
				typeString = "application/octet-stream";
			}
			Entry entry = new Entry();
			entry.setTitle(anchorString);
			entry.setModified(lastMod);
			List<Content> contents = new ArrayList<Content>();
			Content content = new Content();
			content.setSrc(hrefString);
			content.setType(typeString);
			contents.add(content);
			entry.setContents(contents);
			List<Link> links = new ArrayList<Link>();
			Link link = new Link();
			link.setRel("enclosure");
			link.setHref(hrefString);
			link.setType(typeString);
			links.add(link);
			entry.setAlternateLinks(links);
			entry.setId(hrefString);
			entries.add(entry);
			if (lastMod != null && lastMod.after(date)) {
				date = lastMod;
			}
		}
		feed.setEntries(entries);
		feed.setUpdated(date);
		try {
			WireFeedOutput feedOutput = new WireFeedOutput();
			result = feedOutput.outputString(feed);
		} catch (FeedException e) {
			e.printStackTrace(System.err);
		}
		return result;
	}
}
