package com.server.api.service.rollendruck;

import com.server.api.models.RollenDruckDupliArtikel;
import com.server.api.models.VorlageRollendruck;
import com.server.api.repository.RollenDruckDupliRepository;
import com.server.api.repository.VorlageRollendruckRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class VorlageRollendruckService {

    @Autowired
    private VorlageRollendruckRepository vorlageRollendruckRepository;

    @Autowired
    private RollenDruckDupliRepository rollenDruckDupliRepository;

    public void createRollendruckVorlage(VorlageRollendruck vorlage) {
        System.out.println("Das sie die Artiekl "+ vorlage.getArticleTypes());
        vorlageRollendruckRepository.save(vorlage);
    }

    public List<VorlageRollendruck> getAllVorlagen() {
        return vorlageRollendruckRepository.getAllVorlagenRollendruck();
    }

    public void alterVorlage(VorlageRollendruck vorlage) {
        VorlageRollendruck vorlageInDB = vorlageRollendruckRepository.findById(vorlage.getId()).orElseThrow(() -> new RuntimeException("Vorlage not found"));
        vorlageInDB.setPrinter(vorlage.getPrinter());
        vorlageInDB.setHeight(vorlage.getHeight());
        vorlageInDB.setWidth(vorlage.getWidth());
        vorlageInDB.setArticleTypes(vorlage.getArticleTypes());
        vorlageRollendruckRepository.save(vorlageInDB);

    }

    public void deleteVorlageRollendruck(Long id) {
        VorlageRollendruck vorlage = vorlageRollendruckRepository.findById(id)
                .orElseThrow(() -> new RuntimeException("Vorlage not found"));
        vorlageRollendruckRepository.delete(vorlage);
    }

    public void addDupliArtikel(RollenDruckDupliArtikel artikel) {
        // save the article
        rollenDruckDupliRepository.save(artikel);
    }

    public List<RollenDruckDupliArtikel> getAllDupliArtikel() {
        // print all articles
        for (RollenDruckDupliArtikel artikel : rollenDruckDupliRepository.findAll()) {
            System.out.println(artikel);
        }

        return rollenDruckDupliRepository.findAll();
    }

    public void deleteDupliArtikel(Long id) {
        RollenDruckDupliArtikel artikel = rollenDruckDupliRepository.findById(id)
                .orElseThrow(() -> new RuntimeException("Artikel not found"));
        rollenDruckDupliRepository.delete(artikel);
    }

    public VorlageRollendruck getVorlageById(Long id) {
        return vorlageRollendruckRepository.findById(id)
                .orElseThrow(() -> new RuntimeException("Vorlage not found"));

    }

    public List<String> getAllDupliStrings(){
        List<RollenDruckDupliArtikel> dupliArtikelList = rollenDruckDupliRepository.findAll();
        return dupliArtikelList.stream()
                .map(RollenDruckDupliArtikel::getProduct_type)
                .toList();
    }

}
