package edu.ncsu.csc.itrust.action;

import java.util.List;

import edu.ncsu.csc.itrust.exception.DBException;
import edu.ncsu.csc.itrust.model.old.beans.PersonnelBean;
import edu.ncsu.csc.itrust.model.old.beans.ReviewsBean;
import edu.ncsu.csc.itrust.model.old.dao.DAOFactory;
import edu.ncsu.csc.itrust.model.old.dao.mysql.PersonnelDAO;
import edu.ncsu.csc.itrust.model.old.dao.mysql.ReviewsDAO;

/**
 * This class forms the action for the HCP Reviewing system, each category 
 * rated on a scale from 1 (lowest) to 5 (highest), and providing an overall rating 
 * for the HCP.  
 */
public class ReviewsAction {
  private ReviewsDAO dao;
  private PersonnelDAO personnelDAO;
  private long loggedInMID;
  
  public ReviewsAction(DAOFactory factory, long mid){
       	  this.dao = factory.getReviewsDAO();
       	  this.personnelDAO = factory.getPersonnelDAO();
       	  this.loggedInMID = mid;
  }
  
  /**
   * Add a review based on the input params for input of a bean.  
   * @return true if added and false otherwise
   */
  public boolean addReview(ReviewsBean b) throws DBException{
        return dao.addReview(b);
  }
  
  /**
   * Method that returns physician based on a mid.
   * @param mid of physician
   * @return
   * @throws DBException
   */
  public PersonnelBean getPhysician(long mid) throws DBException
  {
	  return personnelDAO.getPersonnel(mid);
  }
  
  /**
   * Get all reviews for a given HCP (ie pid input param), 
   * return as a Java ArrayList
   * @param pid HCP under review's ID
   * @return java.utils.ArrayList of all reviews for the HCP
   * @throws DBException 
   */
  public List<ReviewsBean> getReviews(long pid) throws DBException{
	return dao.getReviews(pid);
  }
  
  /**
   * Checks whether a patient can post a review for a physician.
   * @param pid
   * @return
   * @throws DBException 
   */
  public boolean isAbleToRate(long pid) throws DBException
  {
	  
	 return dao.isRateable(loggedInMID, pid);
  }
  
  /**
   * Get total average rating for a given HCP.
   * @param pid Long ID of the HCP under review
   * @return average int "rating" for the information 
   * @throws DBException 
   */
  public double getAverageRating(long pid) throws DBException{
	return dao.getTotalAverageRating(pid);
  }
}
