package com.example.demo.ffprogram.dao;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;

import javax.sql.DataSource;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.stereotype.Repository;

import com.example.demo.ffprogram.domain.Flier;
import com.example.demo.ffprogram.domain.Flier.Level;

@Repository
public class FlierDaoImpl implements FlierDao
{
	private class FlierRowMapper implements RowMapper<Flier>
	{
		public Flier mapRow(ResultSet rs, int rowNum) throws SQLException
		{
			Flier flier = new Flier();
			long flierId = rs.getLong("flierId");
			flier.setContactInfo(contactDao.getContactsForFlier(flierId));
			flier.setFlierID(flierId);
			flier.setFlierName(rs.getString("name"));

			int levelOrdinal = rs.getInt("level");
			flier.setLevel(levelValues[levelOrdinal]);

			return flier;
		}
	}

	private JdbcTemplate template;
	private FlierRowMapper mapper;
	private ContactInfoDao contactDao;
	private Level[] levelValues;

	@Autowired
	public void setContactInfoDao(ContactInfoDao contactDao)
	{
		this.contactDao = contactDao;
	}

	@Autowired
	public void setDataSource(DataSource ds)
	{
		template = new JdbcTemplate(ds);
		mapper = new FlierRowMapper();
		levelValues = Level.values();
	}

	@Override
	public List<Flier> getAllFliers()
	{
		List<Flier> fliers = template.query("SELECT * FROM Flier", mapper);
		return fliers;
	}

	@Override
	public Flier getFlierById(Long id)
	{
		return null;
	}
}
