require "rails_helper"

RSpec.describe CheckErrorsController, type: :request do
  let(:page) { Capybara::Node::Simple.new(response.body) }
  let(:user) { create(:user, :data_coordinator) }
  let(:lettings_log) { create(:lettings_log, :duplicate, assigned_to: user) }

  describe "check errors page" do
    context "when user is not signed in" do
      it "redirects to sign in page" do
        post "/lettings-logs/#{lettings_log.id}/net-income", params: {}
        expect(response).to redirect_to("/account/sign-in")
      end
    end

    context "when the user is from different organisation" do
      let(:other_user) { create(:user) }

      before do
        sign_in other_user
      end

      it "renders page not found" do
        post "/lettings-logs/#{lettings_log.id}/net-income", params: {}
        expect(response).to have_http_status(:not_found)
      end
    end

    context "when user is signed in" do
      let(:params) do
        {
          id: lettings_log.id,
          lettings_log: {
            page: "income_amount",
            earnings: "100000",
            incfreq: "1",
          },
          check_errors: "",
        }
      end

      before do
        lettings_log.update(needstype: 1, declaration: 1, ecstat1: 10, hhmemb: 2, net_income_known: 0, incfreq: 1, earnings: 1000)
      end

      context "with multiple error fields and answered questions" do
        before do
          sign_in user
          post "/lettings-logs/#{lettings_log.id}/income-amount", params: params
        end

        it "displays correct clear links" do
          expect(page).to have_button("Clear", count: 3)
          expect(page).to have_link("Clear all", href: "/lettings-logs/#{lettings_log.id}/confirm-clear-all-answers")
        end
      end
    end
  end

  describe "confirm clear answer page" do
    context "when user is not signed in" do
      it "redirects to sign in page" do
        post "/lettings-logs/#{lettings_log.id}/confirm-clear-answer", params: {}
        expect(response).to redirect_to("/account/sign-in")
      end
    end

    context "when the user is from different organisation" do
      let(:other_user) { create(:user) }

      before do
        sign_in other_user
      end

      it "renders page not found" do
        post "/lettings-logs/#{lettings_log.id}/confirm-clear-answer", params: {}
        expect(response).to have_http_status(:not_found)
      end
    end

    context "when user is signed in" do
      context "and clearing specific question" do
        let(:params) do
          {
            id: lettings_log.id,
            lettings_log: {
              earnings: "100000",
              incfreq: "1",
              hhmemb: "2",
              page_id: "income_amount",
            },
            hhmemb: "",
          }
        end

        before do
          sign_in user
          post "/lettings-logs/#{lettings_log.id}/confirm-clear-answer", params:
        end

        it "displays correct clear links" do
          expect(page).to have_content("Are you sure you want to clear Number of household members?")
          expect(page).to have_content("This action is permanent")
          expect(page).to have_link("Cancel")
          expect(page).to have_button("Confirm and continue")
        end
      end
    end
  end

  describe "confirm clear all answers page" do
  end

  describe "clear answer" do
    context "when user is not signed in" do
      it "redirects to sign in page" do
        post "/lettings-logs/#{lettings_log.id}/income-amount", params: {}
        expect(response).to redirect_to("/account/sign-in")
      end
    end

    context "when the user is from different organisation" do
      let(:other_user) { create(:user) }

      before do
        sign_in other_user
      end

      it "renders page not found" do
        post "/lettings-logs/#{lettings_log.id}/income-amount", params: {}
        expect(response).to have_http_status(:not_found)
      end
    end

    context "when user is signed in" do
      context "and clearing specific question" do
        let(:params) do
          {
            id: lettings_log.id,
            lettings_log: {
              earnings: "100000",
              incfreq: "1",
              hhmemb: "2",
              clear_question_id: "hhmemb",
              page: "income_amount",
            },
            check_errors: "",
          }
        end

        before do
          sign_in user
          post "/lettings-logs/#{lettings_log.id}/income-amount", params:
        end

        it "displays correct clear links" do
          expect(page).to have_content("Make sure these answers are correct")
          expect(page).to have_content("You didn’t answer this question")
          expect(page).to have_link("Answer")
        end
      end
    end
  end

  describe "clear all answers" do
  end
end