package com.nebula.erp.product.repository;

import com.nebula.erp.product.model.Tax;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;
import java.util.Optional;

@Repository
public interface TaxRepository extends JpaRepository<Tax, Long> {
    // Fetch taxes by tenant
    @Query("SELECT t FROM Tax t WHERE t.tenant = :tenantName AND t.tenant IS NOT NULL")
    Page<Tax> findAllByTenant(Pageable pageable, @Param("tenantName") String tenantName);

    // Custom method to find by id and tenant
    @Query("SELECT t FROM Tax t WHERE t.id = :id AND t.tenant = :tenantName")
    Optional<Tax> findByIdAndTenant(@Param("id") Long id, @Param("tenantName") String tenantName);

    @Query("""
                SELECT t FROM Tax t
                WHERE t.tenant = :tenant
                  AND (
                        LOWER(t.type) LIKE :keyword
                     OR CAST(t.rate AS string) LIKE :keyword
                  )
                ORDER BY t.created_at DESC
            """)
    Page<Tax> searchTaxes(
            @Param("tenant") String tenant,
            @Param("keyword") String keyword,
            Pageable pageable);

}