from model.Position import Position
from .model import GoozaliColumn, GoozaliFieldChoice

job_post_column_to_goozali_column = {
    "date_posted": "Discovered",
    "field": "Field",
    "title": "Job Title",
    "job_url": "Position Link",
    "company_name": "Company",
    "description": "Requirements",
    "location": "Location",
    "company_industry": "Company Industry",
    "id": "Job ID"
}

job_post_column_names = ["id",
                         "date_posted",
                         "field",
                         "title",
                         "job_url",
                         "company_name",
                         "description",
                         "location",
                         "company_industry"]

fields = ["Product Management",
          "Data Analyst",
          "Data Science, ML & Algorithms",
          "Software Engineering",
          "QA",
          "Cybersecurity",
          "IT and System Administration",
          "Frontend Development",
          "DevOps",
          "UI/UX, Design & Content",
          "HR & Recruitment",
          "Mobile Development",
          "Hardware Engineering",
          "Embedded, Low Level & Firmware Engineering",
          "Customer Success",
          "Project Management",
          "Operations",
          "Finance",
          "Systems Engineering",
          "Marketing",
          "Sales",
          "Compliance, Legal & Policy",
          "C-Level",
          "Business Development",
          "Mechanical Engineering",
          "Natural Science",
          "Other"]

def create_position_to_goozali_field_map():
    """
    Creates a map with Position as keys and a list of relevant GoozaliFieldChoice as values.

    Returns:
        dict: A dictionary mapping Position to a list of GoozaliFieldChoice.
    """
    position_to_goozali_map = {
        Position.BACKEND_DEVELOPER: [GoozaliFieldChoice.SOFTWARE_ENGINEERING],
        Position.FULLSTACK_DEVELOPER: [GoozaliFieldChoice.SOFTWARE_ENGINEERING],
        Position.FRONTEND_DEVELOPER: [GoozaliFieldChoice.FRONTEND_DEVELOPMENT, GoozaliFieldChoice.SOFTWARE_ENGINEERING],
        Position.DATA_SCIENTIST: [GoozaliFieldChoice.DATA_SCIENCE_ML_ALGORITHMS],
        Position.DATA_ANALYST: [GoozaliFieldChoice.DATA_ANALYST],
        Position.PROJECT_MANAGER: [GoozaliFieldChoice.PROJECT_MANAGEMENT],
        Position.CLOUD_ENGINEER: [GoozaliFieldChoice.DEVOPS, GoozaliFieldChoice.IT_AND_SYSTEM_ADMINISTRATION],
        Position.CLOUD_ARCHITECT: [GoozaliFieldChoice.DEVOPS, GoozaliFieldChoice.IT_AND_SYSTEM_ADMINISTRATION],
        Position.UX_UI_DESIGNER: [GoozaliFieldChoice.UI_UX_DESIGN_CONTENT],
        Position.PRODUCT_MANAGER: [GoozaliFieldChoice.PRODUCT_MANAGEMENT],
        Position.DEV_OPS_ENGINEER: [GoozaliFieldChoice.DEVOPS],
        Position.BUSINESS_ANALYST: [GoozaliFieldChoice.BUSINESS_DEVELOPMENT],
        Position.CYBERSECURITY_ENGINEER: [GoozaliFieldChoice.CYBERSECURITY],
        Position.MACHINE_LEARNING_ENGINEER: [GoozaliFieldChoice.DATA_SCIENCE_ML_ALGORITHMS],
        Position.ARTIFICIAL_INTELLIGENCE_ENGINEER: [GoozaliFieldChoice.DATA_SCIENCE_ML_ALGORITHMS],
        Position.DATABASE_ADMINISTRATOR: [GoozaliFieldChoice.IT_AND_SYSTEM_ADMINISTRATION],
        Position.SYSTEMS_ADMINISTRATOR: [GoozaliFieldChoice.IT_AND_SYSTEM_ADMINISTRATION],
        Position.NETWORK_ENGINEER: [GoozaliFieldChoice.IT_AND_SYSTEM_ADMINISTRATION],
        Position.TECHNICAL_SUPPORT_SPECIALIST: [GoozaliFieldChoice.IT_AND_SYSTEM_ADMINISTRATION],
        Position.SALES_ENGINEER: [GoozaliFieldChoice.SALES],
        Position.SCRUM_MASTER: [GoozaliFieldChoice.PROJECT_MANAGEMENT],
        Position.IT_MANAGER: [GoozaliFieldChoice.IT_AND_SYSTEM_ADMINISTRATION],
    }
    return position_to_goozali_map

# Get the map
position_to_goozali_field_map = create_position_to_goozali_field_map()

# Key mapper: Extract 'name' as the key
def extract_goozali_column_name(column): return column.name if isinstance(
    column, GoozaliColumn) else None