from models.database import execute_query, execute_single_query, execute_update_query


class SettingsModel:
    @staticmethod
    def get_settings():
        """Get system settings (always returns the first row)"""
        query = "SELECT * FROM settings LIMIT 1"
        result = execute_single_query(query)

        # If no settings exist, create default settings
        if not result:
            SettingsModel.create_default_settings()
            result = execute_single_query(query)

        return result

    @staticmethod
    def create_default_settings():
        """Create default settings if they don't exist"""
        query = """
        INSERT INTO settings (title, description, tags, time_zone)
        VALUES (%s, %s, %s, %s)
        """
        params = (
            'Survey Manager',
            'A professional administrative panel for managing surveys and analyzing temperament profiles',
            'surveys,temperament,analysis,admin',
            'America/New_York'
        )
        return execute_update_query(query, params)

    @staticmethod
    def update_settings(title, logo, description, tags, time_zone):
        """Update system settings"""
        settings = SettingsModel.get_settings()

        if not settings:
            # Create if doesn't exist
            query = """
            INSERT INTO settings (title, logo, description, tags, time_zone)
            VALUES (%s, %s, %s, %s, %s)
            """
            params = (title, logo, description, tags, time_zone)
        else:
            # Update existing
            query = """
            UPDATE settings
            SET title = %s, logo = %s, description = %s, tags = %s, time_zone = %s
            WHERE id = %s
            """
            params = (title, logo, description, tags, time_zone, settings['id'])

        return execute_update_query(query, params)

    @staticmethod
    def get_setting(key, default=None):
        """Get a specific setting value"""
        settings = SettingsModel.get_settings()
        return settings.get(key, default) if settings else default
