<?php
class ModelSaleAuction extends Model {
	public function getAuction($auction_id) {
		$query = $this->db->query("SELECT a.*, pa.*, a.date_added AS date_added, a.date_modified AS date_modified, a.date_closed AS date_closed, pad.name AS auction_name, p.product_id AS product_id, p.image AS product_image, pd.name AS product_name, ast.name AS auction_status, c.email AS customer_email, ab.ip_address AS ip_address, oa.order_id AS order_id FROM " . DB_PREFIX . "auction a INNER JOIN " . DB_PREFIX . "product_auction pa ON (a.product_auction_id = pa.product_auction_id) LEFT JOIN " . DB_PREFIX . "product_auction_description pad ON (pa.product_auction_id = pad.product_auction_id) LEFT JOIN " . DB_PREFIX . "product p ON (pa.product_id = p.product_id) LEFT JOIN " . DB_PREFIX . "product_description pd ON (p.product_id = pd.product_id) LEFT JOIN " . DB_PREFIX . "auction_status ast ON (a.auction_status_id = ast.auction_status_id) LEFT JOIN " . DB_PREFIX . "customer c ON (a.highest_bidder_id = c.customer_id) LEFT JOIN " . DB_PREFIX . "auction_bid ab ON (a.highest_bid_id = ab.auction_bid_id) LEFT JOIN " . DB_PREFIX . "order_auction oa ON (a.order_auction_id = oa.order_auction_id) WHERE a.auction_id = '" . (int)$auction_id . "' AND pd.language_id = '" . (int)$this->config->get('config_language_id') . "' AND pad.language_id = '" . (int)$this->config->get('config_language_id') . "' GROUP BY a.auction_id");

		return $query->row;
	}
	
	public function getAuctions($data = array()) {
		$sql = "SELECT a.*, pa.*, pad.name AS auction_name, p.image AS product_image, pd.name AS product_name, ast.name AS auction_status FROM " . DB_PREFIX . "auction a INNER JOIN " . DB_PREFIX . "product_auction pa ON (a.product_auction_id = pa.product_auction_id) LEFT JOIN " . DB_PREFIX . "product_auction_description pad ON (pa.product_auction_id = pad.product_auction_id) LEFT JOIN " . DB_PREFIX . "product p ON (pa.product_id = p.product_id) LEFT JOIN " . DB_PREFIX . "product_description pd ON (p.product_id = pd.product_id) LEFT JOIN " . DB_PREFIX . "auction_status ast ON (a.auction_status_id = ast.auction_status_id)";
		
		$sql .= " WHERE pd.language_id = '" . (int)$this->config->get('config_language_id') . "' AND pad.language_id = '" . (int)$this->config->get('config_language_id') . "'";
		
		if (!empty($data['filter_auction_name'])) {
			$sql .= " AND LCASE(CONCAT(pd.name, ' ', pad.name)) LIKE '" . $this->db->escape(utf8_strtolower($data['filter_auction_name'])) . "%'";
		}

		if (!empty($data['filter_starting_time'])) {
			$sql .= " AND pa.starting_time >= '" . strtotime($this->db->escape($data['filter_starting_time'])) . "'";
		}
		
		if (!empty($data['filter_highest_bid'])) {
			$sql .= " AND a.highest_bid_amount >= '" . (float)$this->db->escape($data['filter_highest_bid']) . "'";
		}
		
		if (isset($data['filter_total_no_of_bid']) && !is_null($data['filter_total_no_of_bid'])) {
			$sql .= " AND a.total_no_of_bid = '" . (int)$this->db->escape($data['filter_total_no_of_bid']) . "'";
		}
		
		if (isset($data['filter_auction_status_id']) && !is_null($data['filter_auction_status_id'])) {
			$sql .= " AND a.auction_status_id = '" . (int)$data['filter_auction_status_id'] . "'";
		}
				
		if (!empty($data['filter_real_ending_time'])) {
			$sql .= " AND a.real_ending_time >= '" . strtotime($this->db->escape($data['filter_real_ending_time'])) . "'";
		}
		
		$sql .= " GROUP BY a.auction_id";
					
		$sort_data = array(
			'auction_name',
			'pa.starting_time',
			'a.highest_bid_amount',
			'a.total_no_of_bid',
			'auction_status',
			'a.real_ending_time'
		);	
		
		if (isset($data['sort']) && in_array($data['sort'], $sort_data)) {
			$sql .= " ORDER BY " . $data['sort'];	
		} else {
			$sql .= " ORDER BY a.real_ending_time";	
		}
		
		if (isset($data['order']) && ($data['order'] == 'DESC')) {
			$sql .= " DESC";
		} else {
			$sql .= " ASC";
		}
	
		if (isset($data['start']) || isset($data['limit'])) {
			if ($data['start'] < 0) {
				$data['start'] = 0;
			}				

			if ($data['limit'] < 1) {
				$data['limit'] = $this->config->get('config_admin_limit');
			}	
		
			$sql .= " LIMIT " . (int)$data['start'] . "," . (int)$data['limit'];
		}	
		
		$query = $this->db->query($sql);
	
		return $query->rows;
	}
	
	public function getTotalAuctions($data = array()) {
		$sql = "SELECT COUNT(DISTINCT a.auction_id) AS total FROM " . DB_PREFIX . "auction a INNER JOIN " . DB_PREFIX . "product_auction pa ON (a.product_auction_id = pa.product_auction_id) LEFT JOIN " . DB_PREFIX . "product_auction_description pad ON (pa.product_auction_id = pad.product_auction_id) LEFT JOIN " . DB_PREFIX . "product p ON (pa.product_id = p.product_id) LEFT JOIN " . DB_PREFIX . "product_description pd ON (p.product_id = pd.product_id)";
		
		$sql .= " WHERE pd.language_id = '" . (int)$this->config->get('config_language_id') . "' AND pad.language_id = '" . (int)$this->config->get('config_language_id') . "'";
		 			
		if (!empty($data['filter_auction_name'])) {
			$sql .= " AND LCASE(CONCAT(pd.name, ' ', pad.name)) LIKE '" . $this->db->escape(utf8_strtolower($data['filter_auction_name'])) . "%'";
		}
		
		if (!empty($data['filter_starting_time'])) {
			$sql .= " AND pa.starting_time >= '" . strtotime($this->db->escape($data['filter_starting_time'])) . "'";
		}
		
		if (!empty($data['filter_highest_bid'])) {
			$sql .= " AND a.highest_bid_amount >= '" . (float)$this->db->escape($data['filter_highest_bid']) . "'";
		}
		
		if (isset($data['filter_total_no_of_bid']) && !is_null($data['filter_total_no_of_bid'])) {
			$sql .= " AND a.total_no_of_bid = '" . (int)$this->db->escape($data['filter_total_no_of_bid']) . "'";
		}
		
		if (isset($data['filter_auction_status_id']) && !is_null($data['filter_auction_status_id'])) {
			$sql .= " AND a.auction_status_id = '" . (int)$data['filter_auction_status_id'] . "'";
		}
		
		if (!empty($data['filter_real_ending_time'])) {
			$sql .= " AND a.real_ending_time >= '" . strtotime($this->db->escape($data['filter_real_ending_time'])) . "'";
		}
		
		$query = $this->db->query($sql);
		
		return $query->row['total'];
	}

	public function deleteAuction($auction_id) {
		$this->db->query("DELETE pa, a, pad, abs, ua FROM " . DB_PREFIX . "product_auction pa INNER JOIN " . DB_PREFIX . "auction a ON (pa.product_auction_id = a.product_auction_id) LEFT JOIN " . DB_PREFIX . "product_auction_description pad ON (pa.product_auction_id = pad.product_auction_id) LEFT JOIN " . DB_PREFIX . "auction_bid_setting abs ON (a.auction_id = abs.auction_id) LEFT JOIN " . DB_PREFIX . "url_alias ua ON (ua.query = CONCAT('auction_id=', a.auction_id)) WHERE a.auction_id = '" . (int)$auction_id . "'");
	}

	public function getAuctionBids($auction_id, $start = 0, $limit = 20) {
		if ($start < 0) {
			$start = 0;
		}
		
		if ($limit < 1) {
			$limit = 20;
		}	
				
		$query = $this->db->query("SELECT ab.*, CONCAT(c.firstname, ' ', c.lastname) AS customer_name FROM " . DB_PREFIX . "auction_bid ab LEFT JOIN " . DB_PREFIX . "customer c ON (ab.customer_id = c.customer_id) WHERE auction_id = '" . (int)$auction_id . "' ORDER BY ab.bid_amount DESC LIMIT " . (int)$start . "," . (int)$limit);
		return $query->rows;
	}

	public function getTotalAuctionBids($auction_id) {
	  	$query = $this->db->query("SELECT COUNT(*) AS total FROM " . DB_PREFIX . "auction_bid WHERE auction_id = '" . (int)$auction_id . "'");

		return $query->row['total'];
	}

	public function getAuctionSimilars($product_id, $start = 0, $limit = 20) {
		if ($start < 0) {
			$start = 0;
		}
		
		if ($limit < 1) {
			$limit = 20;
		}	
				
		$query = $this->db->query("SELECT a.*, pa.*, pad.name AS auction_name FROM " . DB_PREFIX . "auction a INNER JOIN " . DB_PREFIX . "product_auction pa ON (a.product_auction_id = pa.product_auction_id) LEFT JOIN " . DB_PREFIX . "product_auction_description pad ON (pa.product_auction_id = pad.product_auction_id) WHERE pa.product_id = '" . (int)$product_id . "' AND pad.language_id = '" . (int)$this->config->get('config_language_id') . "' ORDER BY a.real_ending_time DESC LIMIT " . (int)$start . "," . (int)$limit);
		return $query->rows;
	}

	public function getTotalAuctionSimilars($product_id) {
	  	$query = $this->db->query("SELECT COUNT(*) AS total FROM " . DB_PREFIX . "auction a INNER JOIN " . DB_PREFIX . "product_auction pa ON (a.product_auction_id = pa.product_auction_id) LEFT JOIN " . DB_PREFIX . "product_auction_description pad ON (pa.product_auction_id = pad.product_auction_id) WHERE pa.product_id = '" . (int)$product_id . "' AND pad.language_id = '" . (int)$this->config->get('config_language_id') . "'");

		return $query->row['total'];
	}	

	public function getOrderAuction($order_id, $order_product_id) {
		$query = $this->db->query("SELECT auction_id FROM " . DB_PREFIX . "order_auction WHERE order_id = '" . (int)$order_id . "' AND order_product_id = '" . (int)$order_product_id . "'");

		return $query->row;
	}
}
?>