export default class ArtistController {
  constructor(model, view) {
    this.model = model;
    this.view = view;

    // Привязка обработчиков
    this.view.bindAddArtist(this.handleAddArtist);
    this.view.bindDeleteArtist(this.handleDeleteArtist);
    this.view.bindEditArtist(this.handleEditArtist);
    this.view.bindSaveEditArtist(this.handleUpdateArtist);

    // Инициализация приложения
    this.init();
  }

  async init() {
    try {
      const [artists, countries, epochs] = await Promise.all([
        this.model.getAll(),
        this.model.getCountries(),
        this.model.getEpochs()
      ]);
      console.log('Инициализация данных:', { artists, countries, epochs }); // Отладка
      // Проверяем, есть ли epoch и country у артистов
      if (artists.length > 0) {
        console.log('Пример артиста:', artists[0]);
      }
      this.view.renderArtists(artists);
      this.view.initCountries(countries);
      this.view.initEpochs(epochs);
    } catch (error) {
      console.error('Ошибка в init:', error);
      alert('Ошибка загрузки данных: ' + error.message);
    }
  }

  handleAddArtist = async (artist) => {
    try {
      console.log('Добавление артиста:', artist); // Отладка
      await this.model.create(artist);
      await this.init();
      alert('Исполнитель добавлен!');
    } catch (error) {
      console.error('Ошибка в handleAddArtist:', error);
      alert('Ошибка: ' + error.message);
    }
  };

 Z
  handleDeleteArtist = async (id) => {
    if (confirm('Удалить исполнителя?')) {
      try {
        await this.model.delete(id);
        await this.init();
        alert('Исполнитель удален!');
      } catch (error) {
        console.error('Ошибка в handleDeleteArtist:', error);
        alert('Ошибка: ' + error.message);
      }
    }
  };

  handleEditArtist = async (id) => {
    try {
      const artist = await this.model.getById(id);
      console.log('Редактирование артиста:', artist); // Отладка
      if (!artist) {
        throw new Error('Исполнитель не найден');
      }
      this.view.showEditForm(artist);
    } catch (error) {
      console.error('Ошибка в handleEditArtist:', error);
      alert('Ошибка: ' + error.message);
    }
  };

  handleUpdateArtist = async (artist) => {
    try {
      console.log('Обновление артиста:', artist); // Отладка
      if (!artist.epochId || !artist.countryId) {
        throw new Error('Эпоха и страна обязательны');
      }
      await this.model.update(artist.id, {
        name: artist.name,
        description: artist.description,
        epochId: artist.epochId,
        countryId: artist.countryId
      });
      await this.init();
      alert('Изменения сохранены!');
    } catch (error) {
      console.error('Ошибка в handleUpdateArtist:', error);
      alert('Ошибка: ' + error.message);
    }
  };
}