from src.models.user import db

class ExpenseType(db.Model):
    __tablename__ = 'expense_types'
    
    id = db.Column(db.String(2), primary_key=True)  # 01, 02, 03, etc.
    name = db.Column(db.String(200), nullable=False)
    description = db.Column(db.Text)
    is_active = db.Column(db.Boolean, default=True)
    
    def __repr__(self):
        return f'<ExpenseType {self.id} - {self.name}>'
    
    def to_dict(self):
        return {
            'id': self.id,
            'name': self.name,
            'description': self.description,
            'is_active': self.is_active
        }

# Datos iniciales de tipos de gastos según DGII
EXPENSE_TYPES_DATA = [
    {'id': '01', 'name': 'Gastos de Personal', 'description': 'Sueldos, salarios, prestaciones laborales y otros gastos relacionados con el personal'},
    {'id': '02', 'name': 'Gastos por Trabajos, Suministros y Servicios', 'description': 'Servicios profesionales, técnicos, suministros y trabajos contratados'},
    {'id': '03', 'name': 'Arrendamientos', 'description': 'Alquileres de inmuebles, equipos, vehículos y otros activos'},
    {'id': '04', 'name': 'Gastos de Activos Fijo', 'description': 'Depreciación, mantenimiento y reparación de activos fijos'},
    {'id': '05', 'name': 'Gastos de Representación', 'description': 'Gastos de representación, protocolo y relaciones públicas'},
    {'id': '06', 'name': 'Otras Deducciones Admitidas', 'description': 'Otras deducciones permitidas por la ley tributaria'},
    {'id': '07', 'name': 'Gastos Financieros', 'description': 'Intereses, comisiones bancarias y otros gastos financieros'},
    {'id': '08', 'name': 'Gastos Extraordinarios', 'description': 'Gastos no recurrentes o extraordinarios del negocio'},
    {'id': '09', 'name': 'Compras y Gastos que Formaran Parte del Costo de Venta', 'description': 'Compras de mercancías y gastos directos del costo de ventas'},
    {'id': '10', 'name': 'Adquisiciones de Activos', 'description': 'Compra de activos fijos y otros activos de la empresa'},
    {'id': '11', 'name': 'Gastos de Seguros', 'description': 'Primas de seguros y gastos relacionados con pólizas de seguros'}
]

