/**
 * {{FeatureName}} Model - Database operations with Prisma
 * @module {{projectName}}/{{featureName}}-model
 * @file src/api/features/{{featureName}}/{{featureName}}.model.ts
 *
 * @llm-rule WHEN: Need database layer separation for {{featureName}} feature
 * @llm-rule AVOID: Database operations directly in service - use model layer
 * @llm-rule NOTE: Handles all Prisma database operations for {{featureName}} feature
 */

import { databaseClass } from '@voilajsx/appkit/database';
import { loggerClass } from '@voilajsx/appkit/logger';

const logger = loggerClass.get('{{featureName}}-model');

export const model = {
  /**
   * Get all {{featureName}} from database
   */
  async findAll() {
    logger.info('Finding all {{featureName}}');
    const db = await databaseClass.get();
    return await db.{{tableName}}.findMany({
      orderBy: { createdAt: 'desc' }
    });
  },

  /**
   * Find {{featureName}} by ID
   */
  async findById(id: number) {
    logger.info('Finding {{featureName}} by ID', { id });
    const db = await databaseClass.get();
    return await db.{{tableName}}.findUnique({
      where: { id }
    });
  },

  /**
   * Create new {{featureName}}
   */
  async create(data: { name: string }) {
    logger.info('Creating new {{featureName}}', { data });
    const db = await databaseClass.get();
    return await db.{{tableName}}.create({
      data: {
        name: data.name.trim(),
      }
    });
  },

  /**
   * Update {{featureName}} by ID
   */
  async update(id: number, data: { name?: string }) {
    logger.info('Updating {{featureName}}', { id, data });
    const db = await databaseClass.get();
    return await db.{{tableName}}.update({
      where: { id },
      data
    });
  },

  /**
   * Delete {{featureName}} by ID
   */
  async delete(id: number) {
    logger.info('Deleting {{featureName}}', { id });
    const db = await databaseClass.get();
    return await db.{{tableName}}.delete({
      where: { id }
    });
  }
};