import { ShortenerService } from "../src/services/shortener.service";
import { IDatabaseAdapter } from "../src/interfaces/database.interface";

// Mock database adapter for testing
class MockDatabaseAdapter implements IDatabaseAdapter {
  async connect(): Promise<boolean> {
    return true;
  }
  async disconnect(): Promise<void> {}
  isConnected(): boolean {
    return true;
  }
  async createUrl(url: any): Promise<any> {
    return { ...url, createdAt: new Date() };
  }
  async findUrlByUrlId(urlId: string): Promise<any> {
    return null;
  }
  async findUrlByOriginalUrl(originalUrl: string): Promise<any> {
    return null;
  }
  async updateUrlClicks(urlId: string, clicks: number): Promise<void> {}
  async deleteUrl(urlId: string): Promise<boolean> {
    return true;
  }
  on(event: string, listener: (...args: any[]) => void): this {
    return this;
  }
  emit(event: string, ...args: any[]): boolean {
    return true;
  }
}

describe("Shortify Package", () => {
  const mockDbAdapter = new MockDatabaseAdapter();

  it("should create a ShortenerService", () => {
    const service = new ShortenerService("https://example.com/", mockDbAdapter);
    expect(service).toBeDefined();
  });

  it("should have the correct baseUrl format", () => {
    const service = new ShortenerService("https://example.com", mockDbAdapter);
    // @ts-ignore - accessing private property for testing
    expect(service["baseUrl"]).toBe("https://example.com/");
  });
});
