class Support::Sites::Schools::Billing::TechnologyPaymentsController < Support::Sites::Controller
  def index
    service = TechnologyPaymentService.new(school, @school_year)

    if params[:task] == 'outstanding_payments'
      outstanding_students = service.outstanding_students || []
      total_balance = outstanding_students.sum { |payment| TechnologyPayment.default_amount }
      data = format_outstanding_data(outstanding_students)
    else
      payments = service.current_payments || []
      total_balance = payments.sum { |payment| payment['Amount'] || TechnologyPayment.default_amount }
      data = format_payments_data(payments)
    end

    render json: {
      total_balance: total_balance,
      data: data
    }
  end

  def export
    service = TechnologyPaymentService.new(school, @school_year)

    send_data service.export_csv,
      filename: "FAD_Technology_#{Date.current.strftime('%Y%m%d')}.csv",
      type: 'text/csv'
  end

  private
    def school
      @school ||= School.find(params[:school_id])
    end

    def school_year
      @school_year ||=  school.school_years.find_by(id: params[:school_year_id]) || school.current_year
    end

    def format_payments_data(payments)
      payments.map do |payment|
        {
          id: payment['StudentID'],
          student_name: build_student_name(payment['LastName'], payment['FirstName']),
          family_name: payment['FamilyName'] || 'N/A',
          date: payment['tdate'] || 'Outstanding',
          amount: payment['Amount'] || TechnologyPayment.default_amount,
          formatted_amount: ActionController::Base.helpers.number_to_currency(payment['Amount'] || TechnologyPayment.default_amount),
        }
      end
    end

    def format_outstanding_data(outstanding_students)
      outstanding_students.map do |student|
        {
          id: student['StudentID'],
          student_name: build_student_name(student['LastName'], student['FirstName']),
          family_name: student['FamilyName'] || 'N/A',
          date: 'Outstanding',
          amount: TechnologyPayment.default_amount,
          formatted_amount: ActionController::Base.helpers.number_to_currency(TechnologyPayment.default_amount)
        }
      end
    end

    def build_student_name(last_name, first_name)
      student_name = "#{last_name}, #{first_name}".strip
      student_name == ", " ? "N/A" : student_name
    end
end
