from sqlalchemy import Column, Integer, String, ForeignKey, DateTime, Text, Float,UUID
from sqlalchemy.orm import relationship
from datetime import datetime
from sqlalchemy.sql import func
from src.utils.db import Base
import uuid


class Feedback(Base):
    __tablename__ = "feedbacks"

    feedback_id = Column(Integer, primary_key=True, autoincrement=True)
    store_id = Column(Integer, ForeignKey("stores.store_id"), nullable=False)
    datasource_id = Column(Integer, ForeignKey("datasource.ds_id"), nullable=False)
    branch_id = Column(Integer, ForeignKey("branches.branch_id"), nullable=False)  # Fixed missing FK
    customer_name = Column(String(100), nullable=False)
    feedback_posting_date = Column(DateTime, nullable=False)
    feedback_source = Column(String(100), nullable=False)  # e.g., Google, Yelp, Hubwallet
    feedback_rating = Column(Integer, nullable=False)  # Rating between 1-5
    feedback_type = Column(String(50), nullable=False)  # e.g., text, voice
    original_content = Column(Text, nullable=False)  # Raw feedback data
    transcription = Column(Text, nullable=True)  # If voice feedback is provided
    created_at = Column(DateTime, server_default=func.now(), nullable=False)

    # New fields
    sentiment = Column(String(20), nullable=True)  # positive, neutral, negative, mixed
    confidence_score = Column(Float, nullable=True)  # Confidence level of sentiment analysis
    emotion = Column(String(50), nullable=True)  # e.g., frustration, happiness, disappointment
    arousal = Column(String(10), nullable=True)  # passive, active
    

    # Relationships
    store = relationship("Store", back_populates="feedbacks")
    datasource = relationship("Datasource", back_populates="feedbacks")
    branch = relationship("Branch", back_populates="feedbacks")
    emotions=  relationship("Emotion", back_populates="feedbacks") 
    words =  relationship("Word", back_populates="feedbacks")
    review_topics=  relationship("ReviewTopic", back_populates="feedbacks")
    

    
    
    

class Task(Base):
    __tablename__ = "tasks"

    task_id = Column(Integer, primary_key=True, autoincrement=True)
    celery_job_id = Column(String(255), nullable=False, unique=True)  # Celery task ID
    store_id = Column(Integer, ForeignKey("stores.store_id"), nullable=False)
    branch_id = Column(Integer, ForeignKey("branches.branch_id"), nullable=False)
    datasource_id = Column(Integer, ForeignKey("datasource.ds_id"), nullable=False)
    task_status = Column(String(50), nullable=False, default="pending")  # pending, in_progress, completed, failed
    snapshot_id = Column(String, nullable=False)
    created_at = Column(DateTime, server_default=func.now(), nullable=False)

    # Relationships
    store = relationship("Store", back_populates="tasks")
    branch = relationship("Branch", back_populates="tasks")
    datasource = relationship("Datasource", back_populates="tasks")



