class Ability
  include CanCan::Ability

  def initialize(user)
    return unless user # No access if not logged in

    if user.role == "admin"
      can :manage, :all
      return
    end

    # Users can manage their own profile
    can :manage, User, id: user.id

    # Users can only read their own organization
    can :read, Organization, id: user.organization_id

    # Allow read access to the Sample Project for everyone
    can :read, Project, id: 113

    # === PROJECT-BASED PERMISSIONS ===
    can :manage, Project, organization_id: user.organization_id

    # === Respondent Category & Related Models ===
    can :manage, RespondentCategory, project: { organization_id: user.organization_id }
    can :manage, QuantifiableQuestion, respondent_category: { project: { organization_id: user.organization_id } }
    can :manage, InsightsReport, respondent_category: { project: { organization_id: user.organization_id } }
    can :manage, SectionsReport, respondent_category: { project: { organization_id: user.organization_id } }
    can :manage, ThemesReport, respondent_category: { project: { organization_id: user.organization_id } }
    can :manage, HighlightTheme, respondent_category: { project: { organization_id: user.organization_id } }

    # === Respondent & Related Models ===
    can :manage, Respondent,
        respondent_category: { project: { organization_id: user.organization_id } }
    can :manage, InterviewInsight,
        respondent: { respondent_category: { project: { organization_id: user.organization_id } } }
    can :manage, InsightResponse,
        respondent: { respondent_category: { project: { organization_id: user.organization_id } } }
    can :manage, TranscriptSection,
        respondent: { respondent_category: { project: { organization_id: user.organization_id } } }
    can :manage, TranscriptHighlight,
        respondent: { respondent_category: { project: { organization_id: user.organization_id } } }
    can :manage, DocxTranscript,
        respondent: { respondent_category: { project: { organization_id: user.organization_id } } }
    can :manage, WhisperTranscript,
        respondent: { respondent_category: { project: { organization_id: user.organization_id } } }
    can :manage, RespondentTag,
        respondent: { respondent_category: { project: { organization_id: user.organization_id } } }

    # === Interview Questions & Related Models ===
    can :manage, InterviewQuestion, respondent_category: { project: { organization_id: user.organization_id } }

    # === Master Section & Related Models ===
    can :manage, MasterSection, project: { organization_id: user.organization_id }
    can :manage, SectionSummary, groupable: { project: { organization_id: user.organization_id } }

    # === Tag System ===
    can :manage, TagCategory, project: { organization_id: user.organization_id }
    can :manage, Tag, tag_category: { project: { organization_id: user.organization_id } }

    # === Assistant ===
    can :manage, AssistantConversation, project: { organization_id: user.organization_id }
    can :manage, AssistantConversation,
        respondent_category: { project: { organization_id: user.organization_id } }
  end
end
