import React from 'react';
import { Button, Modal } from 'antd';
import { LogoutOutlined } from '@ant-design/icons';
import { clearAuthInfo, getUserInfo } from '../utils/auth';

const LogoutButton = ({ style = {}, onLogout = null }) => {
  const userInfo = getUserInfo();

  const handleLogout = () => {
    Modal.confirm({
      title: '确认退出',
      content: '您确定要退出登录吗？',
      okText: '确定',
      cancelText: '取消',
      onOk: () => {
        // 清除认证信息，但保留记住的登录信息
        clearAuthInfo(false);
        
        // 执行回调函数
        if (onLogout) {
          onLogout();
        } else {
          // 默认跳转到登录页
          window.location.href = '/';
        }
      }
    });
  };

  const handleCompleteLogout = () => {
    Modal.confirm({
      title: '完全退出',
      content: '这将清除所有保存的登录信息，包括"记住我"的设置。确定要继续吗？',
      okText: '确定',
      cancelText: '取消',
      onOk: () => {
        // 清除所有认证信息，包括记住的登录信息
        clearAuthInfo(true);
        
        // 执行回调函数
        if (onLogout) {
          onLogout();
        } else {
          // 默认跳转到登录页
          window.location.href = '/';
        }
      }
    });
  };

  if (!userInfo) {
    return null;
  }

  return (
    <div style={style}>
      <Button 
        type="default" 
        icon={<LogoutOutlined />}
        onClick={handleLogout}
        style={{ marginRight: 8 }}
      >
        退出登录
      </Button>
      <Button 
        type="link" 
        size="small"
        onClick={handleCompleteLogout}
        style={{ color: '#ff4d4f' }}
      >
        完全退出
      </Button>
    </div>
  );
};

export default LogoutButton;
