%definição da base de conhecimento

cliente(classe_alta).
cliente(classe_baixa).
cliente(classe_media).

comercializacao(aluguel).
comercializacao(venda).

%ver a possibilidade de incluir area(m2)

tipo_imovel(quitinete).
tipo_imovel(casa_cidade).
tipo_imovel(casa_praia).
tipo_imovel(casa_campo).
tipo_imovel(apartamento).
tipo_imovel(flat).

atrativos(rua_pavimentada).
atrativos(area_de_lazer).
atrativos(churrasqueira).
atrativos(closet).
atrativos(dependencia).
atrativos(iluminacao_na_rua).
atrativos(piscina).
atrativos(quarto_reversivel).
atrativos(servico_de_seguranca).

%atrativos de casa
atrativos(condominio_fechado).
atrativos(casa_de_cachorro).
atrativos(jardim).
atrativos(quintal).

%atrativos de apartamento
atrativos(cobertura).
atrativos(duplex).

estado_de_conservacao(otimo).
estado_de_conservacao(bom).
estado_de_conservacao(medio).
estado_de_conservacao(ruim).
estado_de_conservacao(pessimo).

regiao(zona_norte).
regiao(centro).
regiao(zona_sul).
regiao(zona_oeste).

bairro(casa_forte).
bairro(parnamirim).
bairro(espinheiro).
bairro(boa_vista).
bairro(sao_jose).
bairro(santo_antonio).
bairro(boa_viagem).
bairro(setubal).
bairro(piedade).
bairro(varzea).
bairro(caxanga).
bairro(eng_do_meio).
bairro(gravata).
bairro(porto_de_galinhas).
bairro(tamandare).

pertence(casa_forte, zona_norte).
pertence(parnamirim, zona_norte).
pertence(espinheiro, zona_norte).
pertence(boa_vista, centro).
pertence(santo_antonio, centro).
pertence(sao_jose, centro).
pertence(boa_viagem, zona_sul).
pertence(setubal, zona_sul).
pertence(piedade, zona_sul).
pertence(varzea, zona_oeste).
pertence(caxanga, zona_oeste).
pertence(eng_do_meio, zona_oeste).
pertence(tamandare, tamandare).
pertence(porto_de_galinhas, porto_de_galinhas).
pertence(gravata, gravata).
pertence(ouricuri, ouricuri).

cidade(recife).
cidade(porto_de_galinhas).
cidade(tamandare).
cidade(gravata).
cidade(ouricuri).

%estado(pernambuco).
%estado(rio_de_janeiro).
%estado(sao_paulo).

%imovel(A,[B],C,D,E) :- tipo_imovel(A),atrativos(B),estado_de_conservacao(C),cidade(D),estado(E).

%imovel(tipo, [atrativos], comercializacao, bairro, cidade, estado_conservacao, quartos, suites, vagas_na_garagem, preco).

imovel(casa_cidade,[rua_pavimentada, iluminacao_na_rua, servico_de_seguranca],bom,parnamirim, recife, 2, 1).
imovel(apartamento,[rua_pavimentada, iluminacao_na_rua, area_de_lazer, churrasqueira],medio,boa_viagem, recife, 2, 1).
imovel(apartamento,[area_de_lazer, churrasqueira],medio,setubal, recife, 4, 1).
imovel(casa_cidade,[iluminacao_na_rua, area_de_lazer, piscina],bom,boa_vista, recife, 2, 1).
imovel(casa_campo,[servico_de_seguranca, area_de_lazer, dependencia],medio,gravata,gravata, 4, 2).
imovel(casa_campo,[area_de_lazer, dependencia, closet, churrasqueira],bom,tamandare, tamandare, 3, 1).
imovel(quitinete,[rua_pavimentada],otimo,varzea,recife, 1, 0).

% regras

retorna_atrativos([]).
retorna_atrativos([H|T]) :- write(H),
                            write(' '),
                            retorna_atrativos(T).


retorna_cidade(C) :- imovel(T, A, Est, _, C, Q, S), write('tipo do imóvel: '), write(T), write(' atrativos: '), retorna_atrativos(A),
                     write('conservação: '), write(Est), write(' com '), write(Q), write(' quartos, sendo '), write(S), write(' suites');
                     not(imovel(T,A,Est,_,C, _, _)), write('Desculpe, no momento não temos imóveis disponíveis em '), write(C).


checaCidade(X) :- cidade(X) -> write('');
		  write('Essa cidade n�o � contemplada por nossos gloriosos servi�os, desculpe a inconveniente inconveni�ncia').

menos_que_quartos(Q) :- imovel(T, A, Est, _, C, P, S), P < Q, write('tipo do imóvel: '), write(T), write(' atrativos: '), retorna_atrativos(A),
                     write('conservação: '), write(Est), write(' com '), write(P), write(' quartos, sendo '), write(S), write(' suites').

%verifica_quartos_suites :- imovel(T, _, _, _, _, Q, S) -> Q >= S, write('erro:numero de quartos menor que de suites').


busca_por_regiao(B) :- pertence(B, R), pertence(X, R), imovel(T, _, _, X, _, _, _), write('tipo do imóvel: '), write(T), write(' atrativos: '), retorna_atrativos(A),
                     write('conservação: '), write(Est), write(' com '), write(P), write(' quartos, sendo '), write(S), write(' suites').
                     
busca_por_bairro(B) :- imovel(T, A, Est, _, C, B, S), write('tipo do imóvel: '), write(T), write(' atrativos: '), retorna_atrativos(A),
                       write('conservação: '), write(Est), write(' com '), write(Q), write(' quartos, sendo '), write(S), write(' suites');
                       not(imovel(T,A,Est,_,C, _, _)), write('Desculpe, no momento não temos imóveis disponíveis em '), write(C).


aluga_continuacao(TTT) :- TTT == 1,
                          write('Digite cidade em que deseja alugar o imóvel: '),
                          readln([CCC]),
	                  retorna_cidade(CCC);
	                  TTT == 2,
	                  write('Digite o nome do bairro proximo ao qual voce deseja alugar o imóvel: '),
                          readln([DDD]),
                          busca_por_regiao(DDD);
                          TTT == 3,
	                  write('Digite o nome do bairro em que voce deseja alugar o imóvel: '),
                          readln([DDD]),
                          busca_por_bairro(DDD).


aluga :- write('Despejo Corretora de Imóveis, Inc'),nl,
         write('Deseja buscar o imovel de que jeito:'),nl,
	 write('1. Cidade em que deseja alugar o imóvel '),nl,
	 write('2. Bairros proxima a determinado bairro'),nl,
         write('3. Bairro em que deseja alugar o imóvel '),nl,
         readln([TTT]),
         aluga_continuacao(TTT).

