using SQLite; using System.Collections.Generic; using System.IO; using System.Threading.Tasks; using MauiAppStock.Models; namespace MauiAppStock.Data { public class Database { private static SingletonConnection db; public static async Task InitializeAsync() { if (db == null) { string dbPath = Path.Combine(FileSystem.AppDataDirectory, "MauiAppStock.db3"); db = SingletonConnection.GetInstance(dbPath); // Création des tables si elles n'existent pas await db.CreateTableAsync(); await db.CreateTableAsync(); await db.CreateTableAsync(); // Table de liaison } } // CRUD pour Appareil public static Task AddAppareilAsync(Appareil appareil) { return db.InsertAsync(appareil); } public static Task> GetAppareilsAsync() { return db.Table().ToListAsync(); } public static Task UpdateAppareilAsync(Appareil appareil) { return db.UpdateAsync(appareil); } public static Task DeleteAppareilAsync(Appareil appareil) { return db.DeleteAsync(appareil); } // CRUD pour Piece public static Task AddPieceAsync(Piece piece) { return db.InsertAsync(piece); } public static Task> GetPiecesAsync() { return db.Table().ToListAsync(); } public static Task UpdatePieceAsync(Piece piece) { return db.UpdateAsync(piece); } public static Task DeletePieceAsync(Piece piece) { return db.DeleteAsync(piece); } // Liaison entre Appareil et Piece public static Task AddAppareilPieceAsync(AppareilPiece appareilPiece) { return db.InsertAsync(appareilPiece); } // Met à jour une association existante public static Task UpdateAppareilPieceAsync(AppareilPiece appareilPiece) { return db.UpdateAsync(appareilPiece); } // Supprime une association existante public static Task DeleteAppareilPieceAsync(AppareilPiece appareilPiece) { return db.DeleteAsync(appareilPiece); } // Récupérer toutes les pièces associées à un appareil public static async Task> GetPiecesForAppareilAsync(int appareilId) { var associations = await db.Table().Where(ap => ap.AppareilId == appareilId).ToListAsync(); var pieces = new List(); foreach (var assoc in associations) { var piece = await db.Table().Where(p => p.Id == assoc.PieceId).FirstOrDefaultAsync(); if (piece != null) { // Assigner le flag de recommandation provenant de la table de liaison piece.EstRecommandee = assoc.EstRecommandee; pieces.Add(piece); } } // Trier pour que les pièces recommandées apparaissent en premier return pieces.OrderByDescending(p => p.EstRecommandee).ToList(); } // Récupérer uniquement les pièces recommandées pour un appareil public static async Task> GetPiecesRecommandeesForAppareilAsync(int appareilId) { var associations = await db.Table() .Where(ap => ap.AppareilId == appareilId && ap.EstRecommandee) .ToListAsync(); var pieces = new List(); foreach (var assoc in associations) { var piece = await db.Table().Where(p => p.Id == assoc.PieceId).FirstOrDefaultAsync(); if (piece != null) pieces.Add(piece); } return pieces; } public static async Task> GetAppareilPiecesForAppareilAsync(int appareilId) { var associations = await db.Table().Where(ap => ap.AppareilId == appareilId).ToListAsync(); foreach (var assoc in associations) { var piece = await db.Table().Where(p => p.Id == assoc.PieceId).FirstOrDefaultAsync(); if (piece != null) { assoc.NomPiece = piece.Nom; assoc.DescriptionPiece = piece.Description; } } return associations.OrderByDescending(a => a.EstRecommandee).ToList(); } public static async Task GetAppareilPieceAsync(int appareilId, int pieceId) { return await db.Table() .Where(ap => ap.AppareilId == appareilId && ap.PieceId == pieceId) .FirstOrDefaultAsync(); } } }