class Library

	# Title;ISBN;Author;Published
	CATALOG_DATA = <<~DATA
		The Adventures of Tom Sawyer;9780191604928;Mark Twain;2007
		Republic;9780718198916;Plato;2012
		Programming Ruby: The Pragmatic Programmers Guide;9780974514055;David Thomas;2004
		Pride and Prejudice by Jane Austen;9781986431484;Jane Austen;2018
		To Kill a Mockingbird;9780446310789;Harper Lee;1988
		Cosmicomics;9780330319089;Italo Calvino;1969
		The Lord of the Rings;9780544003415;J. R. R. Tolkien;2012
		Lord of the Flies;9780140283334;William Golding;1999
		1984: A Novel;9780451524935;George Orwell;2009
	DATA

	CATALOGUE = CATALOG_DATA.split("\n").map {
		|line| line.split(";")
	}

	def initialize
		def lookup_title(isbn)
			CATALOGUE.select {
				|a| a[1] == isbn
			}[0][0]
		end

		def lookup_author(isbn)
			CATALOGUE.select {
				|a| a[1] == isbn
			}[0][2]
		end

		def lookup_publication_year(isbn)
			CATALOGUE.select {
				|a| a[1] == isbn
			}[0][3]
		end

		@counts = CATALOGUE.map { |line| [line[1], [0, 0]] }.to_h
	
		def add_stock!(isbn, count)
			@counts[isbn][0] += count
		end

		def borrow!(isbn)
			if @counts[isbn][0] > 0
				@counts[isbn][0] -= 1
				@counts[isbn][1] += 1
			end
		end

		def put_back!(isbn)
			if @counts[isbn][1] > 0
				@counts[isbn][0] += @counts[isbn][1]
				@counts[isbn][1] = 0
			end
		end

		def lookup_stock(isbn)
			@counts[isbn][0]
		end

		def book_in_stock?(isbn)
			@counts[isbn][0] > 0
		end

		def books_in_stock
			CATALOGUE.map { |line| line[1] }.select { |isbn| @counts[isbn][0] > 0 }
		end

		def total_books_in_stock
			CATALOGUE.inject(0) { |sum, line| sum + @counts[line[1]][0] }
		end
	end
end