import os
import tempfile
from pathlib import Path

import pytest

from aider_gitea.seen_issues_db import SeenIssuesDB


class TestSeenIssuesDBPRInfo:
    def setup_method(self):
        # Create a temporary database file
        self.db_fd, self.db_path = tempfile.mkstemp()
        self.db = SeenIssuesDB(self.db_path)
        
        # Test data
        self.issue_text = "Test issue title\nTest issue description"
        self.issue_number = "123"
        self.pr_number = "456"
        self.pr_url = "https://gitea.example.com/owner/repo/pulls/456"

    def teardown_method(self):
        # Close and remove the temporary database
        self.db.conn.close()
        os.close(self.db_fd)
        os.unlink(self.db_path)

    def test_mark_as_seen_with_pr_info(self):
        # Mark an issue as seen with PR info
        self.db.mark_as_seen(
            self.issue_text, 
            issue_number=self.issue_number,
            pr_number=self.pr_number, 
            pr_url=self.pr_url
        )
        
        # Verify the issue is marked as seen
        assert self.db.has_seen(self.issue_text)
        
        # Verify PR info is stored correctly
        pr_info = self.db.get_pr_info(self.issue_text)
        assert pr_info is not None
        assert pr_info[0] == self.pr_number
        assert pr_info[1] == self.pr_url

    def test_update_pr_info(self):
        # First mark the issue as seen without PR info
        self.db.mark_as_seen(self.issue_text, issue_number=self.issue_number)
        
        # Verify no PR info is available
        assert self.db.get_pr_info(self.issue_text) == (None, None)
        
        # Update with PR info
        updated = self.db.update_pr_info(
            self.issue_text, 
            self.pr_number, 
            self.pr_url
        )
        
        # Verify update was successful
        assert updated
        
        # Verify PR info is now available
        pr_info = self.db.get_pr_info(self.issue_text)
        assert pr_info[0] == self.pr_number
        assert pr_info[1] == self.pr_url

    def test_update_nonexistent_issue(self):
        # Try to update PR info for an issue that doesn't exist
        updated = self.db.update_pr_info(
            "Nonexistent issue", 
            self.pr_number, 
            self.pr_url
        )
        
        # Verify update failed
        assert not updated

    def test_get_pr_info_nonexistent(self):
        # Try to get PR info for an issue that doesn't exist
        pr_info = self.db.get_pr_info("Nonexistent issue")
        
        # Verify no PR info is available
        assert pr_info is None