<?php

require_once 'frontend.inc.php';

class MTAPIi
{
	
	private static $db_conn;
	
	static function construct($db)
	{
		$db_conn = $db;
		return mysqli_ping($db_conn);
	}
	
	static function destruct()
	{
		$db_conn = NULL;
	}
	
	#This just returns the current maximum comic
	static function getNumStrips()
	{
		return max_strip_id();
	}

	static function getNumPanels($comic)
	{
		return get_num_panels($comic);
	}

	static function getPanelTranscript($comic, $panel, $xml=false)
	{
		if(!validate_panel_id($comic, $panel))
		{
			die("Invalid args: $comic $panel\n");
			return false;
		}
		
		$script = build_panel_transcript($comic, $panel);
		if(!$xml)
		{
			return $script;
		}
		else
		{
			$ret = '<panel id="'.$panel.'">';
			foreach($script as $id => $line)
			{
				$ret .= '<line id="' . ($id+1) . '" speaker="'.utfentities($script[$id]['speaker']).'">';
				$ret .= utfentities($script[$id]['speech']);
				$ret .= '</line>';
			}
			$ret .= '</panel>';
		}
		return $ret;
	}

	static function getStripTranscript($comic, $xml=false)
	{
		if(!validate_comic_id($comic))
		{
			return false;
		}
		$script = array();
		$panels = MTAPIi::getNumPanels((int)$comic);
		#Panel numbering is 1-indexed, not 0-indexed, for semantic reasons
		for($i=1; $i <= $panels; $i++)
		{
			$script[]= MTAPIi::getPanelTranscript($comic, $i, $xml);
		}
		if(!$xml)
		{
			return $script;
		}
		else
		{
			$ret = '<comic id="'.$comic.'">';
			$ret .= implode($script, '');
			$ret .= '</comic>';
		}
		return $ret;
	}

	static function getCharactersByPanel($comic, $panel, $speakersOnly=false)
	{
		if(!validate_panel_id($comic, $panel))
		{
			return false;
		}
		
		$panels = MTAPIi::getNumPanels($comic);
		
		$query = 'SELECT DISTINCT speaker FROM transcript WHERE strip = '.(int)$comic;
		$query .= ' AND panel = '.(int)$panel;
		$query .= ' AND speaker NOT LIKE "#%" ';
		if($speakersOnly)
		{
			$query .= " AND search != '' ";
		}
		$query .= 'ORDER BY speaker';
		
		return query_to_array($query);
	}

	static function getCharactersByStrip($comic, $speakersOnly=false)
	{
		if(!validate_comic_id($comic))
		{
			return false;
		}
		
		$query = 'SELECT DISTINCT speaker FROM transcript WHERE strip = '.(int)$comic;
		$query .= ' AND speaker NOT LIKE "#%" ';
		if($speakersOnly)
		{
			$query .= " AND search != '' ";
		}
		$query .= 'ORDER BY speaker';
		
		return query_to_array($query);
	}

	static function getStripTitle($comic)
	{
		if(!validate_comic_id($comic))
		{
			return false;
		}
		$strip = load_strip($comic);
		return $strip['title'];
	}

	static function getStripPubdate($comic)
	{
		if(!validate_comic_id($comic))
		{
			return false;
		}
		$strip = load_strip($comic);
		return $strip['published'];
	}

	static function getStripType($comic)
	{
		if(!validate_comic_id($comic))
		{
			return false;
		}
		$strip = load_strip($comic);
		return $strip['type'];
	}

	static function getStripTypeName($comic)
	{
		if(!validate_comic_id($comic))
		{
			return false;
		}
		#load_strip() really isn't the best tool for this job, as it would mean two queries instead of one
		$query = 'SELECT description FROM strip_t
			JOIN strip ON strip.type = strip_t.id
			WHERE strip.id = '.(int)$comic;
		
		$qr = query_to_array($query);
		return $qr[0];
	}


	static function getStripMeta($comic)
	{
		if(!validate_comic_id($comic))
		{
			return false;
		}
		$query = 'SELECT meta_t.id FROM meta_t
			JOIN meta ON meta_t.id = meta.meta
			JOIN strip_t ON meta.type = strip_t.id
			JOIN strip ON strip.type = strip_t.id
			WHERE strip.id = '.(int)$comic.' ORDER BY meta_t.id';
		
		$qr = query_to_array($query);
		return $qr;
	}
	
	static function getStrip($comic)
	{
		if(!validate_comic_id($comic))
		{
			return false;
		}
		$strip = load_strip($comic);
		$strip['type'] = self::getStripTypeName($strip['type']);
		$strip['number'] = self::getStripNumberInType($comic);
		
		unset($strip['udate']);
		
		return $strip;
	}
	
	static function getStripNumberInType($comic)
	{
		if(!validate_comic_id($comic))
		{
			return false;
		}
		
		$type = self::getStripType($comic);
		
		$query = "SELECT count(*)
			FROM strip_t JOIN strip ON strip_t.id = strip.type
			WHERE strip.id < {$comic}+1
			AND strip.type = {$type}";
		
		$qr = query_to_array($query);
		return $qr[0];
	}

	static function getStripMetaName($comic)
	{
		if(!validate_comic_id($comic))
		{
			return false;
		}
		$query = 'SELECT meta_t.name FROM meta_t
			JOIN meta ON meta_t.id = meta.meta
			JOIN strip_t ON meta.type = strip_t.id
			JOIN strip ON strip.type = strip_t.id
			WHERE strip.id = '.(int)$comic.' ORDER BY meta_t.name';
		
		$qr = query_to_array($query);
		return $qr;
	}

	static function getTypeMeta($type)
	{
		if(!validate_type_id($type))
		{
			return false;
		}
		
		$query = 'SELECT meta_t.id FROM meta_t
			JOIN meta ON meta_t.id = meta.meta
			JOIN strip_t ON meta.type = strip_t.id
			WHERE strip_t.id = '.(int)$type.' ORDER BY meta_t.id';
		
		$qr = query_to_array($query);
		return $qr;
	}

	static function getTypeMetaName($type)
	{
		if(!validate_type_id($type))
		{
			return false;
		}
		
		$query = 'SELECT meta_t.name FROM meta_t
			JOIN meta ON meta_t.id = meta.meta
			JOIN strip_t ON meta.type = strip_t.id
			WHERE strip_t.id = '.(int)$type.' ORDER BY meta_t.name';
		
		$qr = query_to_array($query);
		return $qr;
	}

	static function getStripsByType($type)
	{
		if(!validate_type_id($type))
		{
			return false;
		}
		
		$query = 'SELECT strip.id FROM strip WHERE strip.type = '.(int)$type.' ORDER BY strip.id';
		$qr = query_to_array($query);
		return $qr;
	}


	static function getStripsByMeta($meta)
	{
		if(!ctype_digit($meta) || $meta < 1)
		{
			return false;
		}
		
		$query = 'SELECT strip.id FROM strip
			JOIN strip_t ON strip.type = strip_t.id
			JOIN meta ON strip_t.id = meta.type
			JOIN meta_t ON meta.meta = meta_t.id
			WHERE meta_t.id = '.(int)$meta.' ORDER BY strip.id';
		$qr = query_to_array($query);
		return $qr;
	}
}
?>
