from flask_sqlalchemy import SQLAlchemy db = SQLAlchemy() class Character(db.Model): id = db.Column(db.Integer, primary_key=True) character_id = db.Column(db.String(100), unique=True, nullable=False) slug = db.Column(db.String(100), unique=True, nullable=False) filename = db.Column(db.String(255), nullable=True) name = db.Column(db.String(100), nullable=False) data = db.Column(db.JSON, nullable=False) default_fields = db.Column(db.JSON, nullable=True) image_path = db.Column(db.String(255), nullable=True) active_outfit = db.Column(db.String(100), default='default') def get_active_wardrobe(self): """Get the currently active wardrobe outfit.""" wardrobe = self.data.get('wardrobe', {}) # Check if wardrobe is nested (new format) or flat (legacy) if 'default' in wardrobe and isinstance(wardrobe.get('default'), dict): # New nested format - return active outfit return wardrobe.get(self.active_outfit or 'default', wardrobe.get('default', {})) else: # Legacy flat format - return as-is return wardrobe def get_available_outfits(self): """Get list of available outfit names.""" wardrobe = self.data.get('wardrobe', {}) if 'default' in wardrobe and isinstance(wardrobe.get('default'), dict): return list(wardrobe.keys()) return ['default'] def __repr__(self): return f'' class Outfit(db.Model): id = db.Column(db.Integer, primary_key=True) outfit_id = db.Column(db.String(100), unique=True, nullable=False) slug = db.Column(db.String(100), unique=True, nullable=False) filename = db.Column(db.String(255), nullable=True) name = db.Column(db.String(100), nullable=False) data = db.Column(db.JSON, nullable=False) default_fields = db.Column(db.JSON, nullable=True) image_path = db.Column(db.String(255), nullable=True) def __repr__(self): return f'' class Action(db.Model): id = db.Column(db.Integer, primary_key=True) action_id = db.Column(db.String(100), unique=True, nullable=False) slug = db.Column(db.String(100), unique=True, nullable=False) filename = db.Column(db.String(255), nullable=True) name = db.Column(db.String(100), nullable=False) data = db.Column(db.JSON, nullable=False) default_fields = db.Column(db.JSON, nullable=True) image_path = db.Column(db.String(255), nullable=True) def __repr__(self): return f'' class Settings(db.Model): id = db.Column(db.Integer, primary_key=True) openrouter_api_key = db.Column(db.String(255), nullable=True) openrouter_model = db.Column(db.String(100), default='google/gemini-2.0-flash-001') def __repr__(self): return ''