# frozen_string_literal: true

require "sidekiq/web"

Rails.application.routes.draw do
  devise_for :users

  get "/up" => "site#up"
  get "/map_reduce_payload/:id" => "api#map_reduce_payload"
  post "/api/report_reel_error" => "api#report_reel_error"
  post "/api/secure_login" => "api#secure_login"
  post "/map_reduce_answers/:id" => "api#map_reduce_answers"
  post "/teams-webhook" => "site#teams_webhook"

  authenticate :user do
    mount Sidekiq::Web => "/sidekiq"

    get "site/requests_chart"

    get "/tasks" => "site#tasks"
    post "/tasks/:id/cancel" => "site#cancel_system_task", as: "cancel_system_task"

    get "/create_account" => "site#create_account"
    post "/create_account" => "site#create_account"
    delete "/delete_account" => "site#delete_account"

    get "/update_user/:id" => "site#update_user"
    put "/update_user/:id" => "site#update_user"

    get "/user_list" => "site#user_list"

    get "/qual_alert" => "site#qual_alert"
    post "/qual_alert" => "site#qual_alert"

    get "/manage" => "site#manage"
    get "/api/reel_url/:id" => "api#reel_url"

    post "/toggle_account_state/:id" => "site#toggle_account_state"

    resources :features, only: %i[index show] do
      collection do
        post :add_feature
      end
      member do
        patch :toggle_feature
        delete :remove_feature
      end
    end

    resources :feature_model_maps

    resources :asr_models, except: [:show] do
      member do
        get :manage_languages
        patch :update_languages
      end
    end
    resources :languages, except: [:show]

    resources :organizations

    resources :instructions
    resources :stop_words

    resources :master_sections do
      collection do
        post :create_section
        delete :delete_section
        put :edit_section
        put :reorder
        put :update_order
        get :get_sections
        post :import
        post :import_with_dg
      end
    end

    resources :assistant_conversations, only: %i[create destroy] do
      post :message, on: :member
      get :source, on: :member
    end

    # Projects -> Respondent Categories -> Respondents (Conversation - person or group)
    # E.g. Pune Group 2 is a respondent
    resources :projects do
      get :assistant, on: :member
      get :assistant_v2, on: :member
      post :generate_assistant, on: :member
      get :assistant_status, on: :member
      get :master_sections, on: :member
      get :search, on: :collection
      get :project_deletion_popup, on: :member
      post :reset_assistant, on: :member
      resources :tag_categories do
        get :for_project, on: :collection
        get :import_form, on: :collection
        post :import, on: :collection
        post :create_tag_category, on: :collection
        delete :delete_tag_category, on: :collection
        put :edit_tag_category, on: :collection
        resources :tags do
          post :create_tag, on: :collection
          delete :delete_tag, on: :collection
          put :edit_tag, on: :collection
        end
      end
      resources :respondent_categories do
        post :bulk_queue_transcription, on: :member
        post :clone, on: :member
        get :download_sections, on: :member
        get :respondent_list_task_status, on: :member
        post :reset_assistant, on: :member
        post :stitch_reels, on: :member
        get :fetch_reels, on: :member
        get :assistant_v2, on: :member
        post :generate_assistant, on: :member
        get :assistant_status, on: :member
        post :generate_dg_questions, on: :member
        get :ask_quantifiable_question, on: :member
        get :quantifiable_questions, on: :member
        get :quantifiable_answers, on: :member
        post :submit_quantifiable_question, on: :member
        post :ask_question, on: :member
        resources :manual_summaries
        resources :reels, only: [:destroy] do
          patch :update_name, on: :member
        end
        resources :analysis_reports, only: %i[destroy show] do
          member do
            post :queue_report_generation
            get :download_report
          end
        end
        resources :insights_reports do
          get :generate, on: :member
          get :generate_summary, on: :member
          get :csv, on: :member
          delete :delete_report, on: :member
        end
        resources :sections_reports do
          get :generate_section_report_summary, on: :member
          get :download_report, on: :member
          delete :delete_report, on: :member
        end
        resources :themes_reports do
          get :report, on: :member
          get :download_report, on: :member
          delete :delete_report, on: :member
        end
        resources :interview_questions do
          get :get_questions, on: :collection
          post :import, on: :collection
          post :import_with_dg, on: :collection
          get :assignable, on: :collection
          post :assign_sections, on: :collection
          delete :bulk_delete, on: :collection
          get :bulk_new, on: :collection
          post :bulk_new, on: :collection
          put :reorder, on: :collection
        end
        get :section_cloud, on: :member
        get :sections_list, on: :member
        get :themes_list, on: :member
        resources :word_clouds, only: [:show]
        get :section_summary, on: :member
        post :import_questions, on: :member
        get :download_all_data_report, on: :member
        get :analysis_reports, on: :member
        get :full_analysis_report, on: :member
        get :analysis_report_form, on: :member
        post :generate_analysis_report, on: :member
        get :assistant, on: :member
        get :setup_assistant, on: :member
        post :create_assistant, on: :member
        post :create_sections, on: :member
        get :advanced_analytics, on: :member
        get :generate_all_data_report_summary, on: :member
        get :load_section_data, on: :member
        get :reel_creator, on: :member
        resources :highlight_themes, only: [] do
          collection do
            post :create_theme
            delete :delete_theme
            put :edit_theme
            put :reorder
            put :update_order
            get :get_sections
          end
        end
        resources :respondents do
          collection do
            get :bulk_new
            post :bulk_download
            post :bulk_download_excel
            post :bulk_summaries_download
            post :bulk_bookmark_generate
            post :bulk_summarize_transcripts
            post :move
          end
          member do
            post :gcs_upload_url
            post :finalize_upload
            post :bulk_finalize
            get :transcript_feedback
            post :transcript_feedback
            get :download_audio
            get :download_video
            get :archived_transcripts
            patch "restore_transcript/:transcript_id", to: "respondents#restore_transcript", as: :restore_transcript
            post :clone
            post :add_speaker
            get :tag
            get :audio_tools
            post :cleanup_audio
            post :update_tags
            delete :clear_tags
            get :speaker_map
            get :translation_modal
            post :translate_transcript
            get :transcript_sections
            post :update_speaker_map
            post :create_sections
            post :generate_internal_transcript
            get :auto_transcript
            get :docx_transcript
            get :edit_auto_transcript
            get :edit_docx_transcript
            post :update_auto_transcript
            post :update_docx_transcript
            delete :delete_insights
            delete :delete_sections
            delete :remove_transcript
            delete :remove_manual_transcript
            get :insight_generator
            get :upload_conversation
            post :upload_conversation
            get :download_summary
            get :download_transcript
            post :queue_transcript_summarization
            post :queue_bookmark_generation
          end
          resources :word_clouds, only: [:show]
          resources :transcript_highlights, only: %i[create update destroy] do
            put :assign_theme, on: :member
            post :queue_reel_creation, on: :member
            patch :update_text, on: :member
          end
          resources :transcript_sections, only: %i[create destroy]
        end
        resources :research_documents, only: %i[index new create destroy]
      end
    end

    get "/requests_chart" => "site#requests_chart"
    root "projects#index", as: :user_root
  end

  get "/api/test" => "api#test"
  get "/api/temp-l" => "api#temp_l"
  post "/emergency_shutdown" => "site#emergency_shutdown"
  post "/api/insight" => "api#create_insight"
  post "/api/rate_insight/:id" => "api#rate_insight", as: :rate_insight
  post "/api/instance_details" => "api#instance_details"
  post "/api/instance_state" => "api#instance_state"
  post "/api/save_response" => "api#save_response"
  post "/api/transcript_data" => "api#transcript_data"
  post "/api/transcript_data_v2" => "api#transcript_data_v2"
  post "/api/deepgram_transcript/:id" => "api#deepgram_transcript"
  post "/api/gladia_transcript" => "api#gladia_transcript"
  post "/api/sarvam_transcript" => "api#sarvam_transcript"
  post "/api/update_task_status/:id" => "api#update_task_status"
  post "/api/signal_transcriber_ready" => "api#signal_transcriber_ready"

  post "/api/update_audio_file/:id" => "api#update_audio_file"
  post "/api/update_reel/:id" => "api#update_reel"
  post "/api/update_stitched_reel/:id" => "api#update_stitched_reel"

  post "/api/cloud_job_finish" => "api#cloud_job_finish"
  post "/api/cloud_job_error" => "api#cloud_job_error"

  # Define your application routes per the DSL in https://guides.rubyonrails.org/routing.html

  # Defines the root path route ("/")
  root "site#index"
end
