
CREATE TABLE html_cards (
	id_chave_html_card INT PRIMARY KEY AUTO_INCREMENT,
	nome_html_card TEXT,
	id_curso INT,
	nome_cidade VARCHAR(255),
	id_cidade INT,
	sigla_estado VARCHAR(2),
	id_estado_ibge INT,
	latitude DECIMAL(10,8),
	longitude DECIMAL(11,8),
	id_instituicao INT,
	nome_instituicao VARCHAR(255),
	sigla VARCHAR(20),
	id_url INT,
	url TEXT,
	id_arquivo_fonte INT,
	imagem_curso TEXT
);



INSERT INTO html_cards (nome_html_card, id_curso, nome_cidade, id_cidade, sigla_estado, id_estado_ibge, latitude, longitude, id_instituicao, nome_instituicao, sigla, id_url, url, id_arquivo_fonte, imagem_curso) 


SELECT
    CONCAT(
        '<div id="curso_', id_chave_curso, '" class="linha">',
        '<div class="logo" style="width: ',largura_logo_instituicao,'">', '<img src="../imagens/', logo, '" alt="logo">', '</div>',
        '<div class="nome_instituicao" data-id-instituicao="',id_chave_instituicao,'">', nome_instituicao, '</div>',
        GROUP_CONCAT( DISTINCT
            CONCAT(
       		CASE
			WHEN tc.ordem = 1 THEN '<div class="flip-card"><div class="flip-card-inner"><div class="flip-card-front is-visible"><img class="imagem_curso" src="../imagens/tecnico-eletronica.jpg" alt="Imagem"></div><div class="flip-card-back not-visible"><div class="detalhes">'
			ELSE ''
		END,
         '<div class="celula" style="',tc.isolamento_valor, CASE WHEN tc.limita_largura <> 'nao_limita' THEN concat(' width: ',tc.limita_largura,';') ELSE '' END,'">',
		CASE 
			WHEN tc.mostra_caption_tamanho <> 'nao_mostra' THEN concat
									(
										'<div class="caption" data-tipo-classificacao="', tc.nome_tipo_classificacao, '" ',
										'data-titulo="', COALESCE(t.titulo, 'Sem título'), '" ',
										'data-companion="curso_', id_chave_curso, '" style="font-size: ',tc.mostra_caption_tamanho,';">', tc.caption_substituto, '</div>'
									)
			ELSE ''
		END,
		CASE
			WHEN tc.mostra_valor_tamanho <> 'nao_mostra' THEN concat
									(
								                '<div class="valor" style="',
										'font-size: '			, tc.mostra_valor_tamanho	,'; ',
										'font-weight: '			, tc.bold_valor			,'; ',
										'color: '			, tc.color_valor		,'; ',
										'border: '			, tc.border_valor		,'; ',
										'border-radius: '		, tc.border_radius_valor	,'; ',
										'background-color: '		, tc.background_valor		,'; ',
										'padding-left: '		, tc.padding_left_valor		,'; ',
										'padding-right: '		, tc.padding_right_valor	,'; ',
										'padding-top: '			, tc.padding_top_valor		,'; ',
										'padding-bottom: '		, tc.padding_bottom_valor	,'; ',
										'margin-left: '			, tc.margin_left_valor		,'; ',
										'margin-right: '		, tc.margin_right_valor		,'; ',
										'margin-top: '			, tc.margin_top_valor		,'; ',
										'margin-bottom: '		, tc.margin_bottom_valor	,'; ',
										'">', 
										CASE 											
											WHEN tc.junta_caption_valor = 'sim' THEN concat(tc.caption_substituto,': ')
											ELSE '' 
										END,
										COALESCE(t.titulo, 'Sem título'),tc.caracter_depois_valor, '</div>'
									)
			ELSE ''
		END,
                '</div>',
		CASE 
			WHEN tc.forca_quebra_linha = 'sim' THEN '<div class="forca_quebra"></div>'
			ELSE ''
		END
            )
            ORDER BY tc.ordem, tc.id_chave_tipo_classificacao SEPARATOR ''
        ),
        '</div></div></div></div>', # fecha flip-card
        '</div>'
    ) AS curso_final,
    id_chave_curso,
    cp.nome_cidade,
    id_cidade,
    sigla_estado,
    ep.codigo_ibge id_estado_ibge,
    cp.latitude,
    cp.longitude,
    id_chave_instituicao,
    nome_instituicao,
    sigla,
    id_url,
    (select nome_url from URLs where id_url = id_chave_url) as nome_url,
    cursos.id_arquivo_fonte,
    group_concat(distinct (select nome_imagem from imagens where id_chave_imagem = id_imagem)) as imagem_curso
FROM cursos
LEFT JOIN instituicoes ON id_instituicao = id_chave_instituicao 
LEFT JOIN campos_cursos cc ON cc.id_curso = id_chave_curso
LEFT JOIN frases_opt t ON t.id_titulo = cc.id_titulo
LEFT JOIN tipos_classificacoes tc ON cc.id_tipo_classificacao = tc.id_chave_tipo_classificacao


LEFT JOIN cidades cp ON id_chave_cidade = id_cidade 
LEFT JOIN estados ep ON ep.codigo_ibge = id_estado
LEFT JOIN URLs ON id_url = id_chave_url
LEFT JOIN frases ON frases.id_titulo = t.id_titulo
LEFT JOIN tokens ON (id_chave_token = frases.id_token and nome_tipo_classificacao = 'titulo_do_curso')
LEFT JOIN tokens_imagens ON (tokens_imagens.id_token = id_chave_token)
GROUP BY id_chave_curso
ORDER BY latitude;


# SELECT
#     CONCAT(
#         '<div id="curso_', id_chave_curso, '" class="linha">',
#         '<div class="logo" style="width: ',largura_logo_instituicao,'">', '<img src="../imagens/', logo, '" alt="logo">', '</div>',
#         '<div class="nome_instituicao" data-id-instituicao="',id_chave_instituicao,'">', nome_instituicao, '</div>',
#         GROUP_CONCAT( DISTINCT
#             CONCAT(
#        		CASE
# 			WHEN ordem = 1 THEN '<div class="flip-card"><div class="flip-card-inner"><div class="flip-card-front is-visible"><img class="imagem_curso" src="../imagens/tecnico-eletronica.jpg" alt="Imagem"></div><div class="flip-card-back not-visible"><div class="detalhes">'
# 			ELSE ''
# 		END,
#          '<div class="celula" style="',tc.isolamento_valor, CASE WHEN tc.limita_largura <> 'nao_limita' THEN concat(' width: ',tc.limita_largura,';') ELSE '' END,'">',
# 		CASE 
# 			WHEN tc.mostra_caption_tamanho <> 'nao_mostra' THEN concat
# 									(
# 										'<div class="caption" data-tipo-classificacao="', tc.nome_tipo_classificacao, '" ',
# 										'data-titulo="', COALESCE(t.titulo, 'Sem título'), '" ',
# 										'data-companion="curso_', id_chave_curso, '" style="font-size: ',tc.mostra_caption_tamanho,';">', tc.caption_substituto, '</div>'
# 									)
# 			ELSE ''
# 		END,
# 		CASE
# 			WHEN tc.mostra_valor_tamanho <> 'nao_mostra' THEN concat
# 									(
# 								                '<div class="valor" style="',
# 										'font-size: '			, tc.mostra_valor_tamanho	,'; ',
# 										'font-weight: '			, tc.bold_valor			,'; ',
# 										'color: '			, tc.color_valor		,'; ',
# 										'border: '			, tc.border_valor		,'; ',
# 										'border-radius: '		, tc.border_radius_valor	,'; ',
# 										'background-color: '		, tc.background_valor		,'; ',
# 										'padding-left: '		, tc.padding_left_valor		,'; ',
# 										'padding-right: '		, tc.padding_right_valor	,'; ',
# 										'padding-top: '			, tc.padding_top_valor		,'; ',
# 										'padding-bottom: '		, tc.padding_bottom_valor	,'; ',
# 										'margin-left: '			, tc.margin_left_valor		,'; ',
# 										'margin-right: '		, tc.margin_right_valor		,'; ',
# 										'margin-top: '			, tc.margin_top_valor		,'; ',
# 										'margin-bottom: '		, tc.margin_bottom_valor	,'; ',
# 										'">', 
# 										CASE 											
# 											WHEN tc.junta_caption_valor = 'sim' THEN concat(tc.caption_substituto,': ')
# 											ELSE '' 
# 										END,
# 										COALESCE(t.titulo, 'Sem título'),tc.caracter_depois_valor, '</div>'
# 									)
# 			ELSE ''
# 		END,
#                 '</div>',
# 		CASE 
# 			WHEN tc.forca_quebra_linha = 'sim' THEN '<div class="forca_quebra"></div>'
# 			ELSE ''
# 		END
#             )
#             ORDER BY tc.ordem, tc.id_chave_tipo_classificacao SEPARATOR ''
#         ),
#         '</div></div></div></div>', # fecha flip-card
#         '</div>'
#     ) AS curso_final,
#     id_chave_curso,
#     cp.nome_cidade,
#     id_cidade,
#     sigla_estado,
#     ep.codigo_ibge id_estado_ibge,
#     cp.latitude,
#     cp.longitude,
#     id_chave_instituicao,
#     nome_instituicao,
#     sigla,
#     id_url,
#     (select nome_url from URLs where id_url = id_chave_url) as nome_url,
#     cursos.id_arquivo_fonte
# FROM cursos
# JOIN instituicoes ON id_instituicao = id_chave_instituicao 
# JOIN campos_cursos cc ON cc.id_curso = id_chave_curso
# LEFT JOIN frases_opt t ON t.id_titulo = cc.id_titulo
# LEFT JOIN tipos_classificacoes tc ON cc.id_tipo_classificacao = tc.id_chave_tipo_classificacao
# 
# -- Garantia de que o curso está associado às cidades próximas
# 
# JOIN cidades cp ON id_chave_cidade = id_cidade 
# JOIN estados ep ON ep.codigo_ibge = id_estado
# JOIN URLs ON id_url = id_chave_url
# GROUP BY id_chave_curso
# ORDER BY latitude;

-- Índice primário já existe (id_chave_html_card é PRIMARY KEY)

-- Índices para campos de relacionamento (chaves estrangeiras)
CREATE INDEX idx_html_cards_id_curso ON html_cards(id_curso);
CREATE INDEX idx_html_cards_id_cidade ON html_cards(id_cidade);
CREATE INDEX idx_html_cards_id_estado_ibge ON html_cards(id_estado_ibge);
CREATE INDEX idx_html_cards_id_instituicao ON html_cards(id_instituicao);
CREATE INDEX idx_html_cards_id_url ON html_cards(id_url);
CREATE INDEX idx_html_cards_id_arquivo_fonte ON html_cards(id_arquivo_fonte);

-- Índices para campos de texto com prefixo (TEXT) e campos VARCHAR
CREATE INDEX idx_html_cards_nome_html_card ON html_cards(nome_html_card(255)); -- Prefixo de 255 caracteres para TEXT
CREATE INDEX idx_html_cards_nome_cidade ON html_cards(nome_cidade); -- VARCHAR(255) não precisa de prefixo
CREATE INDEX idx_html_cards_sigla_estado ON html_cards(sigla_estado); -- VARCHAR(2) pequeno, não precisa de prefixo
CREATE INDEX idx_html_cards_nome_instituicao ON html_cards(nome_instituicao); -- VARCHAR(255) não precisa de prefixo
CREATE INDEX idx_html_cards_sigla ON html_cards(sigla); -- VARCHAR(20) pequeno, não precisa de prefixo
CREATE INDEX idx_html_cards_url ON html_cards(url(255)); -- Prefixo de 255 caracteres para TEXT

-- Índices para campos geográficos (podem ser úteis para consultas espaciais)
CREATE INDEX idx_html_cards_latitude ON html_cards(latitude);
CREATE INDEX idx_html_cards_longitude ON html_cards(longitude);

-- Índices compostos para consultas frequentes
-- Exemplo: consultas por estado e cidade
CREATE INDEX idx_html_cards_estado_cidade ON html_cards(sigla_estado, id_cidade);

-- Exemplo: consultas por instituição e curso
CREATE INDEX idx_html_cards_instituicao_curso ON html_cards(id_instituicao, id_curso)
