from telegram.ext import Updater, CommandHandler, CallbackQueryHandler, ConversationHandler, MessageHandler, Filters
from telegram import InlineKeyboardButton, InlineKeyboardMarkup, ParseMode, InputMediaPhoto

# Определение состояний для ConversationHandler
CHOOSE_SPACE, CHOOSE_REPAIR, GET_AREA, CHOOSE_ACTIVITY, CEILING_HEIGHT, FLOOR_REPAIR, BATHROOM, FINALIZE = range(8)

# Функция для обработки команды /start
def start(update, context):
    message_text = '<b>Ремонт под ключ в Москве</b>\n\n'
    message_text += 'Добро пожаловать!\n\n'
    message_text += 'Мы рады приветствовать Вас в качестве потенциального клиента нашей компании, которая специализируется на коммерческом ремонте.\n\n'
    message_text += '<b>ДекоПрактик</b> обладает многолетним опытом работы в сфере ремонта ресторанов, офисов, магазинов, и других коммерческих помещений.\n\n'
    message_text += 'В чем мы можем Вам помочь?\n\n'
    message_text += 'Планирование и дизайн: Мы поможем Вам спланировать и спроектировать идеальное пространство для вашего бизнеса.\n\n<b>Ремонт:</b>\n Мы выполним все виды ремонтных работ, от замены полов и потолков до электромонтажных и сантехнических работ.\n<b>Оснащение:</b>\n Предоставить все необходимые материалы для ремонта и отделки помещения.\n<b>Управление проектом:</b>\n Возьмем на себя управление всем проектом ремонта, от начала до конца.\n\n'
    message_text += 'Для получения бесплатной консультации или запроса сметы, свяжитесь с нами:\n\n'
    message_text += 'Телефон:8 (966) 095-49-49, 8 (985) 089-80-23\n'
    message_text += '<i>Сайт: <a href="https://decopraktik.ru">https://decopraktik.ru/</a></i>'
    
    
    keyboard = [
        [InlineKeyboardButton("📝 Рассчитать ремонт", callback_data='calculate'), InlineKeyboardButton("О нас", callback_data='about')],
        [InlineKeyboardButton("Перейти на сайт", url='https://decopraktik.ru'), InlineKeyboardButton("Презентация", url='https://meshok-ydahy.ru/images/Презентация ДекоПрактик-s.pdf')],
        [InlineKeyboardButton("Заказать дизайн", callback_data='design'), InlineKeyboardButton("Заявка на замер", url='t.me/shmanyov_a')],
        [InlineKeyboardButton("Наши проекты", callback_data='projects'), InlineKeyboardButton("Отзывы", callback_data='measurement')]
    ]
    
    reply_markup = InlineKeyboardMarkup(keyboard)

    update.message.reply_text(
        text=message_text,
        parse_mode=ParseMode.HTML,
        reply_markup=reply_markup
    )
    
    

# Функция для обработки нажатия на кнопку "О нас"
def about(update, context):
    
    
    about_text = "Наша компания уже более 5 лет успешно работает в сфере коммерческого ремонта помещений и специализируется на ремонте кафе, кофеен, гостиниц, ресторанов и торговых площадей.\n\n"
    about_text += "Основатели компании имеют более 20 лет опыта в ремонте и декоративной отделке, что позволяет нам гарантировать высокое качество работ и профессионализм наших сотрудников.\n\n"
    about_text += "Мы стремимся создать для вас уникальное пространство, которое будет соответствовать вашим потребностям и ожиданиям. Наша цель — сделать ваш объект красивым, функциональным и удобным для посетителей.\n\n"
    about_text += "Берем в работу проекты на разной стадии готовности и выполняем,  как косметический ремонт так и полностью капитальный с проектированием и устройством всех инженерных   систем (электрика, сантехника, вентиляция).\n\n"
    about_text += "В работе используем только качественные материалы и современное оборудование, а также следим за последними тенденциями в дизайне и архитектуре.\n\n"
    about_text += "Если вы ищете надёжного партнёра для ремонта вашего объекта, то мы готовы предложить вам свои услуги. Мы уверены, что сможем создать для вас пространство, которое будет радовать вас и ваших клиентов."
    
    update.callback_query.message.reply_text(about_text)



# Функция для обработки нажатия на кнопку "Дизайн проект"
def design(update, context):
    # Первый дизайн проект: 
    design_text = (
        "У нас вы можете заказать дизайн проект разного наполнения, индивидуально под Ваш запрос\n\n" 
        "<b>Основные 3 тарифа:</b>\n\n"
        "<b>ТАРИФ №1</b> Планировочное решение\n"
        "Стоимость:\n" 
        "до 30кв.м - 24 000р,\n" 
        "от 31кв.м - 800р/м2.\n\n" 

        "ЧТО ВХОДИТ:\n"
        "- Обмерный план помещения\n"
        "- План-схема демонтажных работ\n"
        "- Планировка будущего помещения\n"
        "- План-схема монтажных работ\n"
        "- Схемы привязок инженерных систем (электрика; сантехника; освещение)\n"
        "- Планы напольных покрытий, потолков, отделки стен\n"
        "- Развертки стен санузлов, бара или кухни\n"
        "- Чертежи-ТЗ на изготовление заказных позиций мебели\n"
        "- 3D-визуализация\n\n⤵⤵⤵"
        
    )

    # Отправляем текст первого дизайн проекта
    update.callback_query.message.reply_text(
        text=design_text,
        parse_mode=ParseMode.HTML
    )



# Второй дизайн проект: 
    design_text_2 = (
        "<b>ТАРИФ №2</b> Технический проект\n"
        "Стоимость:\n" 
        "до 30кв.м - 54 000р,\n"
        "от 31кв.м - 1800р/м2\n\n"
        
        "ЧТО ВХОДИТ:\n"
        "- Обмерный план помещения\n"
        "- План-схема демонтажных работ\n"
        "- Планировка будущего помещения\n"
        "- План-схема монтажных работ\n"
        "- Схемы привязок инженерных систем (электрика; сантехника; освещение)\n"
        "- Планы напольных покрытий, потолков, отделки стен\n"
        "- Развертки стен санузлов, бара или кухни\n"
        "- Чертежи-ТЗ на изготовление заказных позиций мебели\n"
        "- 3D-визуализация\n\n⤵⤵⤵"
    )

    # Отправляем текст второго дизайн проекта
    update.callback_query.message.reply_text(
        text=design_text_2,
        parse_mode=ParseMode.HTML
    )
    
    
# Третий дизайн проект: 
    design_text_3 = (
        "<b>ТАРИФ №3</b> Дизайн проект\n"
        "Стоимость:\n"  
        "до 30кв.м - 90 000р,\n"
        "от 31кв.м - 3000р/м2\n\n"

        "ЧТО ВХОДИТ:\n"
        "- Обмерный план помещения\n"
        "- План-схема демонтажных работ\n"
        "- Планировка будущего помещения\n"
        "- План-схема монтажных работ\n"
        "- Схемы привязок инженерных систем (электрика; сантехника; освещение)\n"
        "- Планы напольных покрытий, потолков, отделки стен\n"
        "- Развертки стен санузлов, бара или кухни\n"
        "- Чертежи-ТЗ на изготовление заказных позиций мебели\n"
        "- 3D-визуализация\n\n⤵⤵⤵"
    )

    # Отправляем текст третьего дизайн проекта
    update.callback_query.message.reply_text(
        text=design_text_3,
        parse_mode=ParseMode.HTML
    )
    
    
# Дополнительные услуги: 
    design_text_4 = (
        "<b>Дополнительные услуги:</b>\n"
        "Комплектация – 1000 р/м2\n"
        "- Подбор отделочных материалов, освещения, электрофурнитуры, мебели\n"
        "- Общение со всеми менеджерами и поставщиками\n"
        "- Увязка поставок к соответствующим этапам ремонта со строителями\n"
        "- Дополнительные скидки для Вас от проверенных нами поставщиков\n\n"
        "<b>За подробностями</b> ⤵⤵⤵\n"
        "@shmanyov_a"
        
    )

    # Отправляем текст Дополнительные услуги:
    update.callback_query.message.reply_text(
        text=design_text_4,
        parse_mode=ParseMode.HTML
    )
    
    
# Функция для обработки нажатия на кнопку "Наши проекты"
def projects(update, context):
    # Первый проект: OUI bistro by Double B
    project_text = (
        "Ресторан “OUI bistro by Double B”\n\n"
        "На данном проекте помимо отделочных работ была собрана и смонтирована антресоль, а также спроектирован и осуществлен монтаж систем кондиционирования и вентиляции.\n\n"
        "Площадь: 138 кв.м\n\n"
        "Срок исполнения: 75 рабочих дней⤵"
    )

    # Отправляем текст первого проекта
    update.callback_query.message.reply_text(
        text=project_text,
        parse_mode=ParseMode.HTML
    )

    # Создаем список для хранения объектов InputMediaPhoto
    media_list = []
    for i in range(1, 10):
        image_path = f"https://meshok-ydahy.ru/images/project_{i}.jpg"  # Примерный URL к изображению
        media_list.append(InputMediaPhoto(media=image_path))

    # Отправляем альбом изображений первого проекта
    update.callback_query.message.reply_media_group(media=media_list)

    # Второй проект: CARTE BLANCHE
    project_text_2 = (
        "Ресторан “CARTE BLANCHE”\n\n"
        "Была произведена укладка крупноформатного керамогранита на пол и стены, а также декоративная отделка стен.\n\n"
        "Площадь: 115 кв.м\n\n"
        "Срок исполнения: 70 рабочих дней⤵"
    )

    # Отправляем текст второго проекта
    update.callback_query.message.reply_text(
        text=project_text_2,
        parse_mode=ParseMode.HTML
    )

    # Создаем список для хранения объектов InputMediaPhoto второго проекта
    media_list_2 = []
    for i in range(1, 6):
        image_path = f"https://meshok-ydahy.ru/images1/project_{i}.jpg"  # Примерный URL к изображению
        media_list_2.append(InputMediaPhoto(media=image_path))

    # Отправляем альбом изображений второго проекта
    update.callback_query.message.reply_media_group(media=media_list_2)
    
    
    
    # Третий проект: Кофейня  "Double B" 
    project_text_3 = (
        "Кофейня  “Double B”\n"
        "Срок 7 рабочих дней кафе 50 м.кв\n\n"
        "Переделано освещение.\n"
        "Помещение приведено в соответствии с корпоративным стилем.⤵"
    )

    # Отправляем текст третьего проекта
    update.callback_query.message.reply_text(
        text=project_text_3,
        parse_mode=ParseMode.HTML
    )

    # Создаем список для хранения объектов InputMediaPhoto третьего проекта
    media_list_3 = []
    for i in range(1, 10):
        image_path = f"https://meshok-ydahy.ru/images2/project_{i}.jpg"  # Примерный URL к изображению
        media_list_3.append(InputMediaPhoto(media=image_path))

    # Отправляем альбом изображений третьего проекта
    update.callback_query.message.reply_media_group(media=media_list_3)
    
    
    
    
    
    # Четвертый проект: Кофейня  "Double B" 
    project_text_4 = (
        "Кофейня  “Double B”\n"
        "Площадь: 84кв.м\n"
        "Срок исполнения: 20 рабочих дней.⤵"
    )

    # Отправляем текст третьего проекта
    update.callback_query.message.reply_text(
        text=project_text_4,
        parse_mode=ParseMode.HTML
    )

    # Создаем список для хранения объектов InputMediaPhoto третьего проекта
    media_list_4 = []
    for i in range(1, 10):
        image_path = f"https://meshok-ydahy.ru/images3/project_{i}.jpg"  # Примерный URL к изображению
        media_list_4.append(InputMediaPhoto(media=image_path))

    # Отправляем альбом изображений третьего проекта
    update.callback_query.message.reply_media_group(media=media_list_4)
    
    
    
# Функция для обработки нажатия на кнопку "Рассчитать стоимость ремонта"
def calculate(update, context):
    keyboard = [
        [InlineKeyboardButton("Новое помещение", callback_data='new_space'), InlineKeyboardButton("Вторичное помещение", callback_data='old_space')],
    ]
    reply_markup = InlineKeyboardMarkup(keyboard)
    update.callback_query.message.reply_text('Какое помещение?', reply_markup=reply_markup)
    return CHOOSE_SPACE

# Функция для обработки выбора помещения
def choose_space(update, context):
    keyboard = [
        [InlineKeyboardButton("Косметический", callback_data='cosmetic'), InlineKeyboardButton("Капитальный", callback_data='capital')],
    ]
    reply_markup = InlineKeyboardMarkup(keyboard)
    update.callback_query.message.reply_text('Какой ремонт?', reply_markup=reply_markup)
    return CHOOSE_REPAIR

# Функция для обработки выбора типа ремонта
def choose_repair(update, context):
    update.callback_query.message.reply_text('Площадь (м2):')
    return GET_AREA

# Функция для обработки ввода площади
def get_area(update, context):
    context.user_data['area'] = update.message.text
    keyboard = [
        [InlineKeyboardButton("Кафе, ресторан", callback_data='cafe'), InlineKeyboardButton("Мед.центр", callback_data='clinic')],
        [InlineKeyboardButton("Магазин, бутик", callback_data='shop'), InlineKeyboardButton("Гостиница, отель", callback_data='hotel')],
        [InlineKeyboardButton("Офис", callback_data='office'), InlineKeyboardButton("Произв-помещение", callback_data='manufacturing')]
    ]
    reply_markup = InlineKeyboardMarkup(keyboard)
    update.message.reply_text('Что делаем?', reply_markup=reply_markup)
    return CHOOSE_ACTIVITY

# Функция для обработки выбора деятельности
def choose_activity(update, context):
    keyboard = [
        [InlineKeyboardButton("Меньше 3м", callback_data='less_3m'), InlineKeyboardButton("От 3 до 4м", callback_data='3_4m'), InlineKeyboardButton("От 4 до 6м", callback_data='4_6m')],
    ]
    reply_markup = InlineKeyboardMarkup(keyboard)
    update.callback_query.message.reply_text('Высота потолков:', reply_markup=reply_markup)
    return CEILING_HEIGHT

# Функция для обработки выбора высоты потолков
def ceiling_height(update, context):
    keyboard = [
        [InlineKeyboardButton("Да", callback_data='yes_floor'), InlineKeyboardButton("Нет", callback_data='no_floor')],
    ]
    reply_markup = InlineKeyboardMarkup(keyboard)
    update.callback_query.message.reply_text('Ремонт полов:', reply_markup=reply_markup)
    return FLOOR_REPAIR

# Функция для обработки выбора ремонта полов
def floor_repair(update, context):
    keyboard = [
        [InlineKeyboardButton("Да", callback_data='yes_bathroom'), InlineKeyboardButton("Нет", callback_data='no_bathroom')],
    ]
    reply_markup = InlineKeyboardMarkup(keyboard)
    update.callback_query.message.reply_text('Будет ли санузел:', reply_markup=reply_markup)
    return BATHROOM

# Функция для обработки выбора наличия санузла
def bathroom(update, context):
    # Здесь должен быть ваш код для расчета стоимости ремонта
    # ...
    cost_estimate = "Стоимость вашего ремонта..."  # Замените это на реальный расчет стоимости

    keyboard = [
        [InlineKeyboardButton("📞 Позвонить", callback_data='tel:+79660954949'), InlineKeyboardButton("📌 Написать в телеграм", url='t.me/shmanyov_a')],
    ]
    reply_markup = InlineKeyboardMarkup(keyboard)
    update.callback_query.message.reply_text(
        f'Поздравляем! Вы получили просчет вашего ремонта в компании ДекоПрактик. {cost_estimate} Цена полученная вами может отличаться от итоговой в пределах 10% в большую или меньшую сторону. Для уточнения деталей свяжитесь с нами',
        reply_markup=reply_markup
    )
    return FINALIZE

# Функция для обработки завершения диалога
def finalize(update, context):
    # Здесь может быть ваш код для завершения диалога или сохранения данных
    # ...
    update.callback_query.message.reply_text('Спасибо за использование нашего сервиса!')
    return ConversationHandler.END

# Остальные части кода...


def main():
    updater = Updater("7070902757:AAEg-YUeDIGeNrcNy8R5FC5RbnTRI72zjdM", use_context=True)
    dispatcher = updater.dispatcher

    # Создание ConversationHandler
    conv_handler = ConversationHandler(
        entry_points=[CallbackQueryHandler(calculate, pattern='calculate')],
        states={
            CHOOSE_SPACE: [CallbackQueryHandler(choose_space, pattern='^(new_space|old_space)$')],
            CHOOSE_REPAIR: [CallbackQueryHandler(choose_repair, pattern='^(cosmetic|capital)$')],
            GET_AREA: [MessageHandler(Filters.text & ~Filters.command, get_area)],
            CHOOSE_ACTIVITY: [CallbackQueryHandler(choose_activity, pattern='^(cafe|clinic|shop|hotel|office|manufacturing)$')],
            CEILING_HEIGHT: [CallbackQueryHandler(ceiling_height, pattern='^(less_3m|3_4m|4_6m)$')],
            FLOOR_REPAIR: [CallbackQueryHandler(floor_repair, pattern='^(yes_floor|no_floor)$')],
            BATHROOM: [CallbackQueryHandler(bathroom, pattern='^(yes_bathroom|no_bathroom)$')],
            FINALIZE: [CallbackQueryHandler(finalize, pattern='^(call|write_telegram)$')]
        },
        fallbacks=[CommandHandler('start', start)]
    )

    dispatcher.add_handler(CommandHandler("start", start))
    dispatcher.add_handler(conv_handler)
    # Остальные обработчики...
    dispatcher.add_handler(CallbackQueryHandler(about, pattern='about'))
    dispatcher.add_handler(CallbackQueryHandler(design, pattern='design'))  
    dispatcher.add_handler(CallbackQueryHandler(projects, pattern='projects'))  
    
    updater.start_polling()
    updater.idle()

if __name__ == '__main__':
    main()
