import json

# Функция для экранирования одинарных кавычек в строке
def escape_quotes(string):
    return string.replace("'", "''")

# Функция для конвертации JSON в SQL
def json_to_sql(json_data):
    # Создаем SQL-запрос для создания таблицы
    create_table_statement = """
    CREATE TABLE pois_parking (
        `name` TEXT,
        `name_for_emails` TEXT,
        `site` TEXT,
        `subtypes` TEXT,
        `category` TEXT,
        `type` TEXT,
        `phone` TEXT,
        `full_address` TEXT,
        `street` TEXT,
        `city` TEXT,
        `postal_code` TEXT,
        `state` TEXT,
        `us_state` TEXT,
        `country` TEXT,
        `country_code` TEXT,
        `latitude` REAL,
        `longitude` REAL,
        `time_zone` TEXT,
        `plus_code` TEXT,
        `rating` REAL,
        `photo` TEXT,
        `street_view` JSON,
        `description` TEXT
    );
    """

    # Поля, которые должны быть в создаваемой таблице
    allowed_keys = {
        "name", "name_for_emails", "site", "subtypes", "category", "type", "phone", 
        "full_address", "street", "city", "postal_code", "state", "us_state", 
        "country", "country_code", "latitude", "longitude", "time_zone", 
        "plus_code", "rating", "photo", "street_view", "description"
    }

    # Список для хранения всех SQL-запросов
    sql_statements = [create_table_statement]

    # Генерация SQL-запросов для вставки данных
    for record in json_data:
        columns = []
        values = []

        for key, value in record.items():
            if key not in allowed_keys:
                continue
            columns.append(f'`{key}`')
            if key == "street_view" and isinstance(value, str):
                # Преобразование текстового значения в JSON массив
                value = json.dumps(value.split(","))
                values.append(f"'{escape_quotes(value)}'")
            elif value is None:
                values.append("''")  # Заменяем None на пустую строку
            elif isinstance(value, str):
                values.append(f"'{escape_quotes(value)}'")
            elif isinstance(value, bool):
                values.append(str(value).lower())  # Преобразование True/False в true/false
            elif isinstance(value, (dict, list)):  # Преобразование JSON объектов
                json_value = json.dumps(value).replace("'", "''")
                values.append(f"'{escape_quotes(json_value)}'")
            else:
                values.append(str(value))

        columns_str = ", ".join(columns)
        values_str = ", ".join(values)
        sql_statement = f"INSERT INTO pois_parking ({columns_str}) VALUES ({values_str});"
        sql_statements.append(sql_statement)

    return "\n".join(sql_statements)

# Чтение JSON файла
with open('input.json', 'r', encoding='utf-8') as f:
    json_data = json.load(f)

# Замена пустых значений в столбце reviews_tags на пустой объект {}
# Замена пустых значений в столбце reviews_per_score на пустой объект {}
for record in json_data:
    if record.get('reviews_tags') is None:
        record['reviews_tags'] = {}
    if record.get('reviews_per_score') is None:
        record['reviews_per_score'] = {}
    if record.get('working_hours') is None:
        record['working_hours'] = {}
    if record.get('working_hours_old_format') is None:
        record['working_hours_old_format'] = {}
    if record.get('other_hours') is None:
        record['other_hours'] = {}
    if record.get('popular_times') is None:
        record['popular_times'] = {}
    if record.get('range') is None:
        record['range'] = {}
    if record.get('posts') is None:
        record['posts'] = {}
    if record.get('reservation_links') is None:
        record['reservation_links'] = {}
    if record.get('order_links') is None:
        record['order_links'] = {}
    if record.get('cid') is None:
        record['cid'] = {}
    if record.get('located_google_id') is None:
        record['located_google_id'] = {}

# Конвертация JSON в SQL
sql_result = json_to_sql(json_data)

# Запись результата в файл
with open('output.sql', 'w', encoding='utf-8') as f:
    f.write(sql_result)

print("Конвертация завершена. Результат сохранен в output.sql")
