from sqlalchemy import select
from sqlalchemy.exc import IntegrityError
from .engine import async_session
from .models import SmsSettings
import logging


async def get_sms_settings() -> SmsSettings:
    """
    Получить настройки SMS. Если записи нет, создает с дефолтными значениями.
    """
    async with async_session() as session:
        async with session.begin():
            # Пытаемся найти существующую запись
            result = await session.execute(
                select(SmsSettings).where(SmsSettings.id == 1)
            )
            settings = result.scalar_one_or_none()
            
            if settings is None:
                # Создаем запись с дефолтными значениями
                settings = SmsSettings()
                session.add(settings)
                await session.commit()
                logging.info("Созданы дефолтные SMS настройки")
            
            return settings


async def update_sms_text(new_text: str) -> SmsSettings:
    """
    Обновить текст SMS сообщения.
    """
    async with async_session() as session:
        async with session.begin():
            # Получаем/создаем настройки
            result = await session.execute(
                select(SmsSettings).where(SmsSettings.id == 1)
            )
            settings = result.scalar_one_or_none()
            
            if settings is None:
                settings = SmsSettings(sms_text=new_text)
                session.add(settings)
            else:
                settings.sms_text = new_text
            
            await session.commit()
            logging.info(f"SMS текст обновлен: {new_text[:50]}...")
            return settings


async def update_sender_name(new_sender: str) -> SmsSettings:
    """
    Обновить имя отправителя SMS.
    """
    async with async_session() as session:
        async with session.begin():
            # Получаем/создаем настройки
            result = await session.execute(
                select(SmsSettings).where(SmsSettings.id == 1)
            )
            settings = result.scalar_one_or_none()
            
            if settings is None:
                settings = SmsSettings(sender_name=new_sender)
                session.add(settings)
            else:
                settings.sender_name = new_sender
            
            await session.commit()
            logging.info(f"SMS отправитель обновлен: {new_sender}")
            return settings
