import { defineStore } from 'pinia';
import api from '../services/api';
import router from '../routes/router';
//teste
export const useServiceInstanceStore = defineStore('servic_instance', {
  state: () => ({
    service_instance: [],
    total: 0,
    page: 1,
    perPage: 10,
    error: null,
    loading: false,
  }),

  getters: {
    currentPage(state) {
      return state.page;
    },
    totalPages(state) {
      return Math.ceil(state.total / state.perPage);
    },
  },

  actions: {
    /**
     * Busca os turnos (shifts) registrados na API
     */
    async fetchServiceInstance() {    
      this.loading = true;
      this.error = null;
    
      try {
        const response = await api.get('/service_instance/', {
          params: {}
        })
        
        return response.data;
      } catch (error) {
        const status = error?.response?.status;
    
        if (status === 401) {
          console.warn('Não autorizado. Redirecionando para login...');
          router.push('/login');
        }
    
        this.error = error?.response?.data?.message || error.message || 'Erro ao buscar turnos';
        console.error('Erro ao buscar turnos', error);
        throw error;
      } finally {
        this.loading = false;
      }
    },
        /**
     * Busca o ID da instância de serviço pelo nome
     */
    async fetchServiceInstanceIdByName(nome) {
      this.loading = true;
      this.error = null;

      try {
        const response = await api.get(`/service_instance/get-id-by-name/${nome}`, {
          headers: {
            'Content-Type': 'application/json'
          }
        });

        return response.data.id;
      } catch (error) {
        const status = error?.response?.status;

        if (status === 401) {
          console.warn('Não autorizado. Redirecionando para login...');
          router.push('/login');
        }

        this.error = error?.response?.data?.message || error.message || 'Erro ao buscar ID da instância de serviço';
        console.error('Erro ao buscar ID da instância de serviço', error);
        throw error;
      } finally {
        this.loading = false;
      }
    },


    /**
     * Busca um turno específico pelo ID
     */
    async createServiceInstance(service_instance) {
        const url = '/service_instance/';
        this.loading = true;
        this.error = null;
  
        try {
          const response = await api.post(url, service_instance, {
            headers: {
              'Content-Type': 'application/json'
            }
          });
  
          this.service_instance.push(response.data);
          return response.data;
        } catch (error) {
          this.error = error?.response?.data?.message || error.message || 'Erro ao criar turno';
          console.error('Erro ao criar turno', error);
          throw error;
        } finally {
          this.loading = false;
        }
      },
  async deleteServiceInstance(service_instance_id) {
    this.loading = true;
    this.error = null;

    try {
      const response = await api.delete(`/service_instance/${service_instance_id}`);
      return response.data;
    } catch (error) {
      const status = error?.response?.status;

      if (status === 401) {
        console.warn('Não autorizado. Redirecionando para login...');
        router.push('/login');
      }

      this.error = error?.response?.data?.message || error.message || 'Erro ao deletar instância de serviço';
      console.error('Erro ao deletar instância de serviço', error);
      throw error;
    } finally {
      this.loading = false;
    }
  }
},
});