import { Injectable } from '@nestjs/common';
import { InjectRepository } from '@nestjs/typeorm';
import { Repository } from 'typeorm';
import { QuoteRequest } from '../entities/quote-request.entity';
import { EmailService } from './email.service';

@Injectable()
export class QuoteService {
  constructor(
    @InjectRepository(QuoteRequest)
    private quoteRepository: Repository<QuoteRequest>,
    private emailService: EmailService,
  ) {}

  async create(quoteData: any): Promise<QuoteRequest> {
    try {
      // Create new quote request
      const quote = this.quoteRepository.create({
        productId: quoteData.productId,
        quantity: quoteData.quantity,
        deliveryDate: quoteData.deliveryDate,
        specialRequirements: quoteData.specialRequirements,
        contactName: quoteData.contactName,
        contactEmail: quoteData.contactEmail,
        contactPhone: quoteData.contactPhone,
        companyName: quoteData.companyName,
        projectType: quoteData.projectType,
        urgency: quoteData.urgency,
        budget: quoteData.budget,
        timeline: quoteData.timeline,
        additionalNotes: quoteData.additionalNotes,
        preferredContactMethod: quoteData.preferredContactMethod,
        status: 'pending',
      });

      const savedQuote = await this.quoteRepository.save(quote);

      // Send email notification
      await this.emailService.sendQuoteRequestNotification({
        ...quoteData,
        quoteId: savedQuote.id,
      });

      return savedQuote;
    } catch (error) {
      throw new Error(`Failed to create quote request: ${error.message}`);
    }
  }

  async findAll(): Promise<QuoteRequest[]> {
    return this.quoteRepository.find({
      order: { createdAt: 'DESC' },
    });
  }

  async findById(id: number): Promise<QuoteRequest> {
    return this.quoteRepository.findOne({ where: { id } });
  }

  async update(id: number, updateData: any): Promise<QuoteRequest> {
    await this.quoteRepository.update(id, updateData);
    return this.findById(id);
  }

  async delete(id: number): Promise<void> {
    await this.quoteRepository.delete(id);
  }
} 