import yaml

# Função para abrir e carregar o arquivo YAML
def load_yaml_file(filename):
    with open(filename, 'r', encoding='utf-8') as file:
        return yaml.safe_load(file)

# Função para salvar o arquivo YAML
def save_yaml_file(data, filename):
    with open(filename, 'w', encoding='utf-8') as file:
        yaml.dump(data, file, default_flow_style=False, allow_unicode=True, sort_keys=False)


# Abrir o arquivo _moan-config.yml e extrair as informações necessárias
moan_config = load_yaml_file('_moan-config.yml')

# Abrir _quarto.yml
quarto_data = load_yaml_file('_quarto.yml')

metadados_total = moan_config.get('metadados', {})

metadados = metadados_total.get('global', {})

site_url = ''


# Mover conteúdo de pasta-livro-finalizado para output-dir em _quarto-html.yml e _quarto-pdf.yml, definir o site_url completo e atualizar o campo capa
output_dirs = moan_config.get('pasta-livro-finalizado', {})

for file_suffix in ['-html', '-pdf']:
    output_dir_key = 'html' if file_suffix == '-html' else 'pdf'
    output_dir = output_dirs.get(output_dir_key, '')
    
    # Processar _quarto-html.yml e _quarto-pdf.yml
    filename = f'_quarto{file_suffix}.yml'
    data = load_yaml_file(filename)

    # Atualizar output-dir em project
    if 'project' not in data:
        data['project'] = {}
    data['project']['output-dir'] = output_dir

    # Montar site-url completo
    if output_dir_key == 'html':
        site_url = moan_config.get('site-de-publicacao', '') + '/' + output_dir
        endereco_capa = site_url + '/' + metadados.get('capa', '')

    # atualizar campo capa em moan-dados.
    metadados['capa'] = endereco_capa

    # Configurar moan-dados
    if 'moan-dados' not in data:
        data['moan-dados'] = {}

    moan_dados = data.get('moan-dados', {})  # Obtém os metadados existentes ou cria um dicionário vazio

    metadados_especificos_sem_ark = metadados_total.get(output_dir_key, {})

    if 'ark' in moan_dados:

        ark = moan_dados['ark']

        metadados_especificos = {"ark": ark, **metadados_especificos_sem_ark, **metadados}

        data['moan-dados'] = metadados_especificos
    
    else:
        data['moan-dados'] = {**metadados_especificos_sem_ark, **metadados}
       
    

    # Salvar as alterações
    save_yaml_file(data, filename)




# Processar as alterações em _quarto-html.yml e _quarto-pdf.yml
for file_suffix in ['-html', '-pdf']:
    capitulos_a_excluir_key = 'html' if file_suffix == '-html' else 'pdf'
    capitulos_a_excluir = moan_config['capitulos-a-excluir'].get(capitulos_a_excluir_key, [])
    
    # Processar _quarto-html.yml e _quarto-pdf.yml
    filename = f'_quarto{file_suffix}.yml'
    data = load_yaml_file(filename)

    # Adicionar metadados a moan-dados
    moan_dados = data.get('moan-dados', {})  # Obtém os metadados existentes ou cria um dicionário vazio
    moan_dados = {**moan_dados, **metadados}  # Adiciona ou atualiza os novos metadados
    data['moan-dados'] = moan_dados

    # Processar capitulos
    capitulos = moan_config.get('capitulos', [])

    capitulos = [capitulo for capitulo in capitulos if capitulo not in capitulos_a_excluir]

    if 'book' not in data:
        data['book'] = {}
    if 'chapters' not in data['book']:
        data['book']['chapters'] = []
    data['book']['chapters'] = capitulos

    # Salvar as alterações
    save_yaml_file(data, filename)



# Atualizar as chaves em book 
if 'book' in quarto_data:
    book = quarto_data['book']

    metadados_html = metadados_total.get('html', {})

    metadados_pdf = metadados_total.get('pdf', {})

    politica_de_cookies = moan_config.get('url-politica-de-cookies', '')

    cookie_consent = book.get('cookie-consent', {})

    # Atualizando o valor de 'policy-url'
    cookie_consent['policy-url'] = politica_de_cookies

    data = metadados_html.get('data', metadados_pdf.get('data', ''))
    partes = data.split("/")

    # Reorganizando as partes da data
    data_formatada = partes[2] + "-" + partes[1] + "-" + partes[0]


    # Atualizar sidebar.tools
    sidebar = book.get("sidebar", {})
    tools = sidebar.get("tools", [])

    # Pegar o output_dir para HTML e montar URL_LIVRO
    output_dir_html = output_dirs.get("html", "")
    URL_LIVRO = output_dir_html

    # Garantir que seja lista
    if not isinstance(tools, list):
        tools = []

    git_item = {
        "icon": "bi bi-git",
        "text": "Alterações e Versões",
        "href": f"https://gitea.livro.online/editoramoan/{URL_LIVRO}/commits/branch/main",
    }

    # Inserir na segunda posição
    if len(tools) >= 1:
        tools.insert(1, git_item)
    else:
        tools.append(git_item)

    sidebar["tools"] = tools
    book["sidebar"] = sidebar

   

    status = metadados_html.get('status', 'indisponível')

    book.update({
        'site-url': site_url,
        'status': status,
        'isbn': metadados_html.get('isbn', metadados_pdf.get('isbn', '')),
        'title': metadados.get('título', ''),
        'subtitle': metadados.get('subtítulo', ''),
        'author': metadados.get('autor', ''),
        'description': metadados.get('descrição', ''),
        'language': metadados.get('idioma', ''),
        'publisher': metadados.get('editora', ''),
        'edition': metadados.get('edição', ''),
        'editor': metadados.get('editor', ''),
        'date': data_formatada,
        'publisher-place': metadados.get('local', ''),
        'license': metadados.get('licença', ''),
        'cookie-consent': cookie_consent
    })

# Salvar as alterações em _quarto.yml
save_yaml_file(quarto_data, '_quarto.yml')


# Pegar ficha catalográfica e verificar se é publicação independente ou não

ficha = moan_config.get('ficha-catalográfica', {})

# Abrir o arquivo _quarto-pdf.yml e carregar seu conteúdo
dados = load_yaml_file("_quarto-pdf.yml")

# Verificar se há a chave 'ficha-catalográfica'
if 'ficha-catalográfica' in dados:
    # Se existir, substituir seu valor pelo valor de 'ficha'
    dados['ficha-catalográfica'] = ficha
else:
    # Se não houver, criar a chave e atribuir o valor de 'ficha' a ela
    dados['ficha-catalográfica'] = ficha

dados['possui-editora'] = moan_config.get('possui-editora', 'false')

save_yaml_file(dados, "_quarto-pdf.yml")
