const { expect } = require('chai');
const Container = require('../src/core/Container');

describe('DI Container', () => {
  let container;

  beforeEach(() => {
    container = new Container();
  });

  it('should register and resolve a singleton service', () => {
    // TODO 1: Teszt: singleton service mindig ugyanazt az instance-t adja vissza
    // 1. Regisztrálj egy service-t: container.register('TestService', () => ({ id: Math.random() }), 'singleton');
    // 2. Resolve-old kétszer: const instance1 = container.resolve('TestService');
    // 3. Ellenőrizd, hogy ugyanaz az instance: expect(instance1).to.equal(instance2);
  });

  it('should create new instance for transient service', () => {
    // TODO 2: Teszt: transient service mindig új instance-t ad vissza
    // 1. Regisztrálj egy transient service-t: container.register('TransientService', () => ({ id: Math.random() }), 'transient');
    // 2. Resolve-old kétszer
    // 3. Ellenőrizd, hogy különböző instance-ok: expect(instance1).to.not.equal(instance2);
  });

  it('should resolve scoped service within scope', () => {
    // TODO 3: Teszt: scoped service scope-on belül ugyanaz, kívül más instance
    // 1. Regisztrálj egy scoped service-t: container.register('ScopedService', () => ({ id: Math.random() }), 'scoped');
    // 2. Hozz létre egy scope-ot: const scope1 = container.createScope();
    // 3. Resolve-old kétszer ugyanabban a scope-ban
    // 4. Ellenőrizd, hogy ugyanaz az instance
    // 5. Hozz létre új scope-ot és resolve-old ott is
    // 6. Ellenőrizd, hogy különböző instance-ok a két scope között
  });

  it('should throw error for unregistered service', () => {
    // TODO 4: Teszt: nem regisztrált service resolve hiba dobása
    // Tipp: expect(() => container.resolve('NonExistentService')).to.throw();
  });
});
