import os
import sys
import subprocess
import logging
import re
from data_list import *

logging.basicConfig(level=logging.getLevelName(LOG_LEVEL), format = "%(message)s")

# Собираем список с нужными базами
if not all([SOURCE, TYPES]):
    logging.error("Переменные SOURCE, TYPES не заданы")
    sys.exit(1)
types_keys = ', '.join(TYPES.keys())
logging.debug(f"Собираем список с расширением файлов {types_keys} в каталоге {SOURCE}")

list_path = []
for root, dirs, files in os.walk(SOURCE):
    for file in files:
        if file.endswith(tuple(TYPES.keys())):
            list_path.append(os.path.join(root, file))
            logging.debug(f"Найден подходящий файл {os.path.join(root, file)[len(SOURCE):]}")

logging.info(f"Найдено {len(list_path)} файлов для регистрации в базе")

if len(list_path) == 0:
    logging.error(f"Файлы баз данных для формирования списка в каталоге {SOURCE} не обнаружены. Проверьте правильность переменной TYPES")
    sys.exit(1)

if not USR:
    logging.error("Переменная USR не задана")
    sys.exit(1)

# Собираем данные для базы
list_values = []
for elem in list_path:
    list_values.append({
        'path': re.sub(r'/', r'\\', re.sub('.*drive_c', r'C:', elem)),
        'type': TYPES[elem.split('.')[-1]],
        'usr': USR
    })

logging.debug(f"Создаём временный файл file_with_values.txt с данными для отправки в базу в текущей дериктории")

if not all([SERVER,PORT]):
    logging.error("Переменные SERVER,PORT не заданы")
    sys.exit(1)

#Создаём файл с данными для отправки в базу
with open('file_with_values.txt', 'w') as f:
    f.write('DELETE FROM SWDBS;\n')
    for item in list_values:
        values_path = item['path']
        values_type = item['type']
        values_usr = item['usr']
        f.write(f"INSERT INTO SWDBS (path, type, usr) VALUES ('{SERVER}/{PORT}:{values_path}', {values_type}, '{values_usr}');\n")
    f.write('COMMIT;\n')
    f.write('SELECT COUNT(*) FROM SWDBS;\n')
    

with open('file_with_values.txt', 'r') as f:    
    read_file = f.read()

logging.debug(f"Содержимое файла:\n{read_file}")
if not SWBUILD:
    logging.error("Переменная SWBUILD не задана")
    sys.exit(1)



if not all([FB_CLIENT_PATH, SCRIPT_DIR, USER_ID, PASSWORD]):
    logging.error("Переменные PROVIDER, SCRIPT_DIR, USER_ID, PASSWORD не заданы")
    sys.exit(1)

#Подключаемся к базе, заполняем данными из файла
my_env = os.environ
my_env["WINEPREFIX"] = PREFIX_PATH
res = subprocess.run(["wine", f"{FB_CLIENT_PATH}", "-i", f"{SCRIPT_DIR}/file_with_values.txt", "-u", f"{USER_ID}", "-p", f"{PASSWORD}", f"{SWBUILD}"], capture_output = True, text = True, env = my_env)


logging.info(f"Отправляем файл file_with_values.txt для выполнения в базу данных - выполняем команду 'WINEPREFIX={PREFIX_PATH} wine {FB_CLIENT_PATH} -i {SCRIPT_DIR}/file_with_values.txt -u *** -p *** {SWBUILD}'")



print("Баз зарегистрировано:", res.stdout.split()[-1])

logging.debug(f"Удаляем временный файл file_with_values.txt")

os.remove(f'{SCRIPT_DIR}/file_with_values.txt')
