import clubPaymentClaimService from '../services/clubPaymentClaimService.js';

class ClubPaymentClaimController {
  async list(req, res) {
    try {
      const payload = await clubPaymentClaimService.listClaims(Number(req.params.clubId));
      res.json(payload);
    } catch (error) {
      console.error('[listClubPaymentClaims] - Error:', error);
      res.status(error?.status || 500).json({ error: error?.message || 'Zahlungsforderungen konnten nicht geladen werden.' });
    }
  }

  async create(req, res) {
    try {
      const claim = await clubPaymentClaimService.createClaim(Number(req.params.clubId), req.body || {});
      res.status(201).json({ claim });
    } catch (error) {
      console.error('[createClubPaymentClaim] - Error:', error);
      res.status(error?.status || 500).json({ error: error?.message || 'Zahlungsforderung konnte nicht gespeichert werden.' });
    }
  }

  async update(req, res) {
    try {
      const claim = await clubPaymentClaimService.updateClaim(Number(req.params.clubId), Number(req.params.claimId), req.body || {});
      res.json({ claim });
    } catch (error) {
      console.error('[updateClubPaymentClaim] - Error:', error);
      res.status(error?.status || 500).json({ error: error?.message || 'Zahlungsforderung konnte nicht gespeichert werden.' });
    }
  }

  async updateStatus(req, res) {
    try {
      const claim = await clubPaymentClaimService.updateClaimStatus(
        Number(req.params.clubId),
        Number(req.params.claimId),
        String(req.body?.status || '')
      );
      res.json({ claim });
    } catch (error) {
      console.error('[updateClubPaymentClaimStatus] - Error:', error);
      res.status(error?.status || 500).json({ error: error?.message || 'Status konnte nicht gespeichert werden.' });
    }
  }

  async registerPayment(req, res) {
    try {
      const claim = await clubPaymentClaimService.registerPayment(
        Number(req.params.clubId),
        Number(req.params.claimId),
        req.body || {}
      );
      res.json({ claim });
    } catch (error) {
      console.error('[registerClubPaymentClaimPayment] - Error:', error);
      res.status(error?.status || 500).json({ error: error?.message || 'Teilzahlung konnte nicht gespeichert werden.' });
    }
  }

  async delete(req, res) {
    try {
      await clubPaymentClaimService.deleteClaim(Number(req.params.clubId), Number(req.params.claimId));
      res.json({ success: true });
    } catch (error) {
      console.error('[deleteClubPaymentClaim] - Error:', error);
      res.status(error?.status || 500).json({ error: error?.message || 'Zahlungsforderung konnte nicht gelöscht werden.' });
    }
  }
}

export default new ClubPaymentClaimController();
