import 'dart:async'; import 'package:sqflite/sqflite.dart'; import 'package:path/path.dart'; class DatabaseHelper { static DatabaseHelper? _instance; static Database? _database; DatabaseHelper._internal(); static DatabaseHelper get instance { _instance ??= DatabaseHelper._internal(); return _instance!; } Future get database async { _database ??= await _initDatabase(); return _database!; } Future _initDatabase() async { String path = join(await getDatabasesPath(), 'pos_database.db'); return await openDatabase( path, version: 1, onCreate: _onCreate, onUpgrade: _onUpgrade, ); } Future _onCreate(Database db, int version) async { // Products table await db.execute(''' CREATE TABLE products ( id TEXT PRIMARY KEY, organization_id TEXT, category_id TEXT, sku TEXT, name TEXT, description TEXT, price INTEGER, cost INTEGER, business_type TEXT, image_url TEXT, printer_type TEXT, metadata TEXT, is_active INTEGER, created_at TEXT, updated_at TEXT ) '''); // Product Variants table await db.execute(''' CREATE TABLE product_variants ( id TEXT PRIMARY KEY, product_id TEXT, name TEXT, price_modifier INTEGER, cost INTEGER, metadata TEXT, created_at TEXT, updated_at TEXT, FOREIGN KEY (product_id) REFERENCES products (id) ON DELETE CASCADE ) '''); // Create indexes for better performance await db.execute( 'CREATE INDEX idx_products_category_id ON products(category_id)'); await db.execute('CREATE INDEX idx_products_name ON products(name)'); await db.execute('CREATE INDEX idx_products_sku ON products(sku)'); await db.execute( 'CREATE INDEX idx_products_description ON products(description)'); } Future _onUpgrade(Database db, int oldVersion, int newVersion) async { // Handle database upgrades here } Future close() async { final db = await database; await db.close(); _database = null; } }